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)
    • 只在原地交换,不需要额外的存储空间。

相关推荐
折哥的程序人生 · 物流技术专研15 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
玖玥拾16 小时前
C/C++ 基础笔记(十四)多态与模板编程
c语言·c++·多态·模板
想吃火锅100517 小时前
【leetcode】14.最长公共前缀js
算法·leetcode·职场和发展
Roann_seo%17 小时前
C++文件操作完全指南:从文本读写到二进制文件处理
开发语言·c++
坚果派·白晓明18 小时前
【鸿蒙PC】SDL3 适配:AtomCode + Skills 快速集成 NAPI 测试工具
c++·华为·ai编程·harmonyos·atomcode
云絮.18 小时前
数据库操作
数据库·mysql·算法·oracle
小林ixn18 小时前
LeetCode 206. 反转链表(迭代 + 递归详解)
算法·leetcode·链表
凡人叶枫18 小时前
Effective C++ 条款17:以独立语句将 newed 对象置入智能指针
java·linux·开发语言·c++·算法
我爱cope19 小时前
【Agent智能体26 | 多智能体-多智能体工作流】
人工智能·设计模式·语言模型·职场和发展
凡人叶枫20 小时前
Effective C++ 条款16:成对使用 new 和 delete 时要采取相同形式
开发语言·c++·effective c++