48. Rotate Image

You are given an n x n 2D matrix representing an image.

Rotate the image by 90 degrees (clockwise).


解题思路


这道题是将一个n*n的二维矩阵顺时针旋转90度,最重要的是得到变换相对应的点之间的坐标关系

我们知道每个点经过变换以后相对于顶点的位置保持不变。由此,我们可以推出坐标(i,j)在变换后相对应的点。

48. Rotate Image_第1张图片
Rotate

再找到对应关系之后,我们只需要简单地减缓他们的值就可以啦~

PS: n为奇数时要做特殊处理

代码

class Solution {
public:
    void rotate(vector>& 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;
            }
        }
    }
};

你可能感兴趣的:(48. Rotate Image)