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?
这个题关键是空间复杂度O(1)的做法。(之前写了个O(n)的水过了,今天看了程序员面试金典上的解法,特来分享一波)。
class Solution {
public:
void rotate(vector<vector<int> > &matrix) {
int len=matrix.size();
if(len==0||len==1)
return;
for(int layer=0;layer<len/2;layer++){
int first=layer;
int last=len-1-layer;
for(int i=first;i<last;i++){
int offset=i-first;
int temp=matrix[layer][i];//保存上边的值
matrix[layer][i]=matrix[last-offset][layer];//左往上转
matrix[last-offset][layer]=matrix[last][last-offset];//下往左转
matrix[last][last-offset]=matrix[i][last];//右往下转
matrix[i][last]=temp;//上往右转
}
}
}
};