leetcode 48旋转图像

cpp 复制代码
class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size();
        for(int i = 0;i<n;i++){
            for(int j=i;j<n;j++){
                swap(matrix[i][j],matrix[j][i]);
            }
        }
        for(int i=0;i<n;i++){
            reverse(matrix[i].begin(),matrix[i].end());
        }
    }
};

这段代码的作用就是:把一个 \(n \times n\) 的矩阵顺时针旋转 90°。核心只有两步。

原矩阵假设是:

复制代码
1 2 3
4 5 6
7 8 9

第一步,沿主对角线转置:

复制代码
for(int i = 0; i < n; i++){
    for(int j = i; j < n; j++){
        swap(matrix[i][j], matrix[j][i]);
    }
}

swap(matrix[i][j], matrix[j][i]) 就是把行列位置交换,例如:

复制代码
2 ↔ 4
3 ↔ 7
6 ↔ 8

于是:

复制代码
1 2 3       1 4 7
4 5 6  →    2 5 8
7 8 9       3 6 9

这里 j = i 是为了只交换主对角线右上方的元素,防止同一对元素交换两次又换回来。

第二步,把每一行左右反转:

复制代码
for(int i = 0; i < n; i++){
    reverse(matrix[i].begin(), matrix[i].end());
}

也就是:

复制代码
1 4 7       7 4 1
2 5 8  →    8 5 2
3 6 9       9 6 3

最终:

复制代码
7 4 1
8 5 2
9 6 3

这就是原矩阵顺时针旋转 90°。

所以这道题最简单的记忆方式就是:

顺时针旋转 90° = 先转置 + 再每行反转

时间复杂度是 \(O(n^2)\) ,额外空间复杂度是 \(O(1)\)。

相关推荐
GreenTea7 分钟前
深度拆解 ScienceBuddy:如何用“双层递归自进化”构建高可靠科研 Agent Harness
前端·后端·算法
花椒技术15 分钟前
2.46 秒生成 5 秒视频:拆解 H3 Max 的模型、推理栈与硬件协同
算法·音视频开发·视频编码
vivo互联网技术23 分钟前
ART:妆容迁移框架,重新定义高保真妆容迁移 | ECCV 2026
人工智能·算法·图像识别
用户04414409244925 分钟前
卫星信号模拟器里的四个坐标转换公式
算法
橘和柠35 分钟前
阿里 open-code-review (AI代码审查工具)实战:安装、四层规则链、自定义规则格式与实测避坑
算法·面试
得物技术35 分钟前
别再只卷向量检索了,得物交易搜索如何用“生成式”实现召回范式跃迁?
人工智能·算法·llm
罗西的思考36 分钟前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(4)--- Rollout实现细节
人工智能·算法
罗西的思考1 小时前
机器人 / 物理 Agent Harness 综合分析与对比:从「更强的模型」到「更好的系统」
人工智能·算法·机器学习
库玛西1 小时前
攻克 408 数据结构:图论基石深度拆解(数学极值推演 + 存储内存剖析 + BFS/DFS 双核模板)
数据结构·算法·深度优先·广度优先·图搜索算法
倒头就睡的小比特5 天前
算法竞赛C++常用的STL
c++·算法