LeetCode 48. Rotate Image
阿新 • • 發佈:2018-12-12
題解
這題只要有點分解的意識就好了。旋轉矩陣其實就是在按照順時針 順序依次swap一行/列,如下圖。每完成一個 口字再往內部走就是個 更小的 口字。
4
- - - |
3 | | 1
| |
| - - -
2
Code
class Solution {
public:
int cot[500];
void rotate(vector<vector<int>>& matrix) {
if(matrix.empty()) return;
int len = matrix.size()-1; // 邊長
int t,x,y,tmp;
x=y=0;
while(len>=1){
t=0;
for(int j=y;j<y+len;j++)
cot[t++]=matrix[x][j];
y+=len;t=0; // x=0, y=len
for (int i=x;i<x+len;i++){
tmp = matrix[i][y];
matrix[i][y]=cot[t];
cot[t++]=tmp;
}
x+=len;t=0;// x=len, y=len
for(int j=y;j>y-len;j--){
tmp = matrix[x][j];
matrix[x][j]=cot[ t];
cot[t++]=tmp;
}
y-=len;t=0;// x=len, y=0
for(int i=x;i>x-len;i--){
tmp = matrix[i][y];
matrix[i][y]=cot[t];
cot[t++]=tmp;
}
x-=len;t=0;// x=0, y=0
for(int j=y;j<y+len;j++){
tmp = matrix[x][j];
matrix[x][j]=cot[t];
cot[t++]=tmp;
}
x++;y++;
len-=2;
}
}
};