leetcode-48 旋转数组

it2023-01-11  70

我的第一想法是:从表面上看,其实就是将:二维数组的行转化成列,但是题目说,只能从从原本上面去进行查找

所以找一找二维数组的性质吧: 1.上下翻转,然后主对角线转置 2.左右翻转,然后沿着副对角线翻转 3.先主对角线翻转,然后左右翻转

虽然方式多种多样,但是第一种的实现方式是比较简单的。因为行交换是第一维度,列是第二维度

class Solution { public: //已经传入了引用,就不需要去再去使用一个新的数组 void rotate(vector<vector<int>>& matrix) { int len=matrix.size(); //一定一定要注意边界,不然几乎就是错了 //自己拿一个数据去模拟一下 //0和len-1的行去换 //1和len-2的行去换 for(int i=0;i<len/2;i++) swap(matrix[i],matrix[len-i-1]); for(int i=0;i<len;i++) for(int j=i;j<len;j++)//这里不同要写错标了。行和列需要去对应 swap(matrix[i][j],matrix[j][i]); } };

方法三的实现方式:

class Solution { public: //已经传入了引用,就不需要去再去使用一个新的数组 void rotate(vector<vector<int>>& matrix) { int len=matrix.size(); //主对角线去交换 for(int i=0;i<len;i++) for(int j=i;j<len;j++) swap(matrix[i][j],matrix[j][i]); //左右交换 for(int i=0;i<len;i++) for(int j=0;j<len/2;j++) swap(matrix[i][j],matrix[i][len-j-1]); } };
最新回复(0)