Skip to content

LeetCode48.旋转图像

更新: 1/31/2026 字数: 0 字 时长: 0 分钟

题目链接:

48. 旋转图像 - 力扣(LeetCode)

题意很简单,就是在原数组上进行顺时针旋转,我们以左上角 A,右上角 B,右下角 C,左下角 D 为例,要经过一次旋转,即为A<D<C<B<A的这样一个循环就能实现旋转, 但是当 A 的位置被赋值成 D 后 A 原本的值不见了,所以我们需要一个 tmp 变量记录下当前 A 的数,就能实现四个数的旋转了。既然每次都能实现四个数的旋转,那么我们只需要将整个矩阵分成四份,每次都进行上面一个操作就能对整个矩阵进行旋转了,对于偶数就是分为长宽为$ n/2 n/2 (n + 1)/2 $的矩阵。

代码如下:

cpp
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 + 1) / 2;j++) {
                int tmp = matrix[i][j];
                matrix[i][j] = matrix[n - 1 - j][i];
                matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];
                matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];
                matrix[j][n - 1 - i] = tmp;
            }
        }
    }
};

高亮这里的代码需要自己多推导一下。