You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
解题思路
这道题是将一个n*n的二维矩阵顺时针旋转90度,最重要的是得到变换相对应的点之间的坐标关系
我们知道每个点经过变换以后相对于顶点的位置保持不变。由此,我们可以推出坐标(i,j)在变换后相对应的点。
再找到对应关系之后,我们只需要简单地减缓他们的值就可以啦~
PS: n为奇数时要做特殊处理
代码
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
for (int i = 0; i < n / 2; i++)
for (int j = 0; j < n / 2; j++){
int tmp = matrix[i][j];
matrix[i][j] = matrix[n-j-1][i];
matrix[n-j-1][i] = matrix[n-i-1][n-j-1];
matrix[n-i-1][n-j-1] = matrix[j][n-i-1];
matrix[j][n-i-1] = tmp;
}
if (n % 2 == 1) {
int i = n / 2;
for (int j = 0; j < n / 2; j++){
int tmp = matrix[i][j];
matrix[i][j] = matrix[n-j-1][i];
matrix[n-j-1][i] = matrix[n-i-1][n-j-1];
matrix[n-i-1][n-j-1] = matrix[j][n-i-1];
matrix[j][n-i-1] = tmp;
}
}
}
};