1 题目
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Note:
You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.
2 尝试解
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
for(int i = 0; i <n/2; i++){ //一圈圈地转,一共N/2圈
for(int j = i; j < (n-1-i); j++){
int temp[4];
temp[0] = matrix[i][j];
temp[1] = matrix[j][n-1-i];
temp[2] = matrix[n-1-i][n-1-j];
temp[3] = matrix[n-1-j][i];
matrix[i][j] = temp[3];
matrix[j][n-1-i] = temp[0];
matrix[n-1-i][n-1-j] = temp[1];
matrix[n-1-j][i] = temp[2];
}
}
}
};
3 标准解
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
int a = 0;
int b = n-1;
while(a<b){
for(int i=0;i<(b-a);++i){
swap(matrix[a][a+i], matrix[a+i][b]);
swap(matrix[a][a+i], matrix[b][b-i]);
swap(matrix[a][a+i], matrix[b-i][a]);
}
++a;
--b;
}
}