Quesiton:
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
分析:
将一个n*n 的矩阵旋转90度,原地旋转,O(1)的空间复杂度;
思路:
知道数组旋转90度,就是将原数组的第i行改为第n-i列,但是这样的二重循环不能原地转换,且时间较长。
可以将数组分为两步转换,
1、将原矩阵以对角线对称转换,这样的结果的每一行与最终结果的每一行正好互为逆序;
2、在将每一行逆序;
比如:
1、2、3 1、4、7 7、4、1
4、5、6 2、5、8 8、5、2
7、8、9 3、6、9 9、6、3
代码如下:
<span style="font-size:14px;">class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
if(matrix.size() <= 1)
return ;
/* vector<vector<int>> temp(matrix);
for(int i = 0; i < temp.size();){
for(int j = 0; j < temp[0].size(); ++j){
matrix[j][i] = temp[temp.size()-1-i][j];
}
}*/
for(int i = 0; i < matrix.size()-1; ++i){
for(int j = i+1; j < matrix.size(); ++j)
swap(matrix[i][j],matrix[j][i]);
}
for(int i = 0; i < matrix.size(); ++i){
int left = 0;
int right = matrix.size() - 1;
while(left < right){
swap(matrix[i][left],matrix[i][right]);
++left;
--right;
}
}
}
void swap(int& a,int& b){
int t = a;
a = b;
b = t;
}
};</span>