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?
思路:我自己的思路是按层从外到内替换
比如:
XXXX
XXXX
XXXX
XXXX
最开始处理
XXXX
X X
X X
XXXX
并且只需对第一行头3个点旋转的4个位置进行替换
然后去掉上面那层处理
XX
XX
只需处理第一个点就行。
代码如下:
class Solution {
public:
void rotate(vector<vector<int> > &matrix) {
int size=matrix.size();
int newsize;
for(int i=0;i<size/2;++i){
newsize=size-2*i;
for(int j=0;j<newsize-1;++j){
int temp=matrix[i][i+j];
int x,y;
x=i;y=i+j;
for(int k=0;k<4;++k){
temp^=matrix[y][size-1-x];
matrix[y][size-1-x]^=temp;
temp^=matrix[y][size-1-x];
int tempx=x;
x=y;
y=size-1-tempx;
}
}
}
return;
}
};
在网上看到下述思路还不错