以下是 LeetCode 48. 旋转图像 的 C++ 实现,采用转置 + 行反转的方法:

#include <vector>
#include <algorithm>

class Solution {
public:
    void rotate(std::vector<std::vector<int>>& matrix) {
        int n = matrix.size();
        
        // 1. 转置矩阵(沿主对角线交换)
        for (int i = 0; i < n; ++i) {
            for (int j = i + 1; j < n; ++j) {
                std::swap(matrix[i][j], matrix[j][i]);
            }
        }
        
        // 2. 反转每一行
        for (auto& row : matrix) {
            std::reverse(row.begin(), row.end());
        }
    }
};

思路说明

顺时针旋转 90 度等价于先对矩阵进行转置,再将每一行反转。

· 转置:交换 matrix[i][j] 和 matrix[j][i],使行列互换。
· 行反转:每行元素顺序颠倒,即完成 90° 顺时针旋转。

例如:

原矩阵:
[1,2,3]
[4,5,6]
[7,8,9]

转置后:
[1,4,7]
[2,5,8]
[3,6,9]

行反转后:
[7,4,1]
[8,5,2]
[9,6,3]

复杂度分析

· 时间复杂度:O(n²),转置遍历上三角 O(n²/2),反转每行 O(n²)。
· 空间复杂度:O(1),原地修改,仅使用常数级额外空间。

这种方法简洁明了,是本题最优解法之一。
在这里插入图片描述

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐