LongDz 的数字文墨提案

48. 旋转图像

3 min

题目

48. 旋转图像 中等

解法:翻转转置

思路

核心思想:先上下翻转矩阵,再沿主对角线转置。 正确性:上下翻转将行顺序颠倒,转置实现行列互换,组合效果等价于顺时针旋转90度。数学上,旋转90度可分解为这两个线性变换:设原矩阵为M,上下翻转后为M’,转置后为M”,则M”=M^T·J(J为翻转矩阵),该变换与旋转操作等价。

  • Step 1: 遍历前n/2行,交换第i行与第n-1-i行
  • Step 2: 遍历矩阵上三角区域,交换matrix[i][j]与matrix[j][i]

复杂度

  • 时间复杂度: O(n2)O(n^2),需遍历整个矩阵两次,每层循环均为O(n)。
  • 空间复杂度: O(1)O(1),仅使用常数级额外变量进行元素交换。

代码

    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;j++){
                    swap(matrix[i][j],matrix[n-i-1][j]);
                }
            }
            for (int i = 0; i < n; ++i) {
                for (int j = i + 1; j < n; ++j) {
                    swap(matrix[i][j], matrix[j][i]);
                }       
            }
           
           
        }
    };