LeetCode 48. 旋转图像

Algorithm

  • [🎯 问题](#🎯 问题)
  • [🏛 通俗解释](#🏛 通俗解释)
  • [🛠️ 伪代码](#🛠️ 伪代码)
  • [⚡ C++ 实现](#⚡ C++ 实现)
  • [📦 示例](#📦 示例)
  • [📚 时间 & 空间复杂度分析](#📚 时间 & 空间复杂度分析)

🎯 问题

给定一个 n × n 的二维矩阵 matrix,将其 原地顺时针旋转 90°

⚠️ 要求:

  • 必须在原地修改 matrix
  • 不允许使用额外的矩阵来存储结果。

🏛 通俗解释

旋转 90° 可以分解为两步:

  1. 转置 (transpose):把 matrix[i][j]matrix[j][i] 交换(沿主对角线翻转)。

    例子:

    复制代码
    1 2 3        1 4 7
    4 5 6   →    2 5 8
    7 8 9        3 6 9
  2. 翻转每一行(reverse row):把每一行左右对称交换。

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

最终得到的就是顺时针旋转 90° 的结果。


🛠️ 伪代码

复制代码
function rotate(matrix):
    n = len(matrix)

    # 第一步:转置矩阵
    for i in 0..n-1:
        for j in i..n-1:
            swap(matrix[i][j], matrix[j][i])

    # 第二步:翻转每一行
    for i in 0..n-1:
        reverse(matrix[i])

⚡ C++ 实现

cpp 复制代码
#include <vector>
#include <algorithm>
using namespace std;

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size();

        // 1. 转置矩阵
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
                swap(matrix[i][j], matrix[j][i]);
            }
        }

        // 2. 每一行翻转
        for (int i = 0; i < n; i++) {
            reverse(matrix[i].begin(), matrix[i].end());
        }
    }
};

📦 示例

输入:

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

执行过程:

  1. 转置 →

    1 4 7
    2 5 8
    3 6 9

  2. 每行翻转 →

    7 4 1
    8 5 2
    9 6 3

输出:

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

📚 时间 & 空间复杂度分析

  • 时间复杂度 :O(n²)
    • 转置需要访问矩阵上三角部分(约 n²/2),翻转每行 O(n),合计 O(n²)。
  • 空间复杂度 :O(1)
    • 只在原地交换,不需要额外的存储空间。

相关推荐
炽烈小老头几秒前
【每天学习一点算法 2026/05/21】课程表
学习·算法
Season4502 分钟前
C++之模板元编程(前置知识 constexpr)
开发语言·c++
luoganttcc4 分钟前
大模型是否即将到达算法极限
算法
咩咦23 分钟前
C++学习笔记22:前置后置 ++/-- 和日期减日期
c++·学习笔记·运算符重载·日期类·前置++·后置++·日期减日期
计算机安禾27 分钟前
【c++面向对象编程】第40篇:单例模式(Singleton)的多种C++实现
开发语言·c++·单例模式
叶小鸡32 分钟前
小鸡玩算法-力扣HOT100-动态规划(上)
算法·leetcode·动态规划
LuminousCPP38 分钟前
数据结构 - 线性表第三篇:基于顺序表实现 C 语言通讯录(基础功能篇)
c语言·数据结构·经验分享·笔记·算法
_日拱一卒42 分钟前
LeetCode:114二叉树展开为链表
java·开发语言·算法
无小道1 小时前
Redis——哈希类型相关指令
redis·算法·哈希算法
凌波粒1 小时前
LeetCode--513.找树左下角的值(二叉树)
java·算法·leetcode