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?
题意
用二维数组表示一张2d图片,将图片顺时针旋转90°,不使用额外空间。
题解
1、由外往内一层层旋转,这样一定可以做出来,但是比较慢,而且代码比较繁琐。
2、通过对称的方法实现旋转。 对称方法1:沿副对角线对称变换,然后沿水平中线对称变换。
对称方法2:沿水平中线对称变换,然后沿主对角线变换。
方法二的时间复杂度为O(n^2),空间为常数。
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int len=matrix.size();
for(int i=0;i!=len-1;i++)
for(int j=0;j<len-i-1;j++)
swap(matrix[i][j],matrix[len-j-1][len-i-1]);
for(int i=0;i!=len/2;i++)
for(int j=0;j!=len;j++)
swap(matrix[i][j],matrix[len-1-i][j]);
}
};