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

相关推荐
努力实干3 分钟前
Qt/C++ 模块化设计与工程组织
开发语言·c++·qt
Suprman7 分钟前
平面排版问题的数学建模与算法设计
算法·数学建模·排序算法·排版套料
FPGA信号处理8 分钟前
【应用随机过程】:更新过程与马尔可夫链入门
算法·概率论
Rabitebla9 分钟前
【Linux底层原理】 工具篇(二):Vim 编辑器基础操作与简单配置
linux·c++·编辑器·vim
重生之小比特21 分钟前
【算法拾光】二分查找|在排序数组中查找元素的第一个和最后一个位置 + 搜索旋转排序数组
数据结构·算法·排序算法
吴可可12327 分钟前
DXF与AAMA格式转换模块推荐
算法
Lhan.zzZ27 分钟前
Qt:动态库模块框架设计
开发语言·c++·qt
重生之小比特33 分钟前
【算法拾光】二分查找|搜索旋转排序数组 + 寻找旋转排序数组中的最小值
算法
wuminyu34 分钟前
JVM规范学习总结-JVM规范基本概念
java·linux·c语言·jvm·c++
YukiRinLL36 分钟前
查找与排序算法:复杂度、稳定性
数据结构·算法·排序算法