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

相关推荐
承渊政道2 分钟前
动态内存管理
c语言·c++·经验分享·c#·visual studio
孤独得猿18 分钟前
聊天室项目开发——etcd的安装和使用
linux·服务器·c++·etcd
伏小白白白25 分钟前
【论文精度-2】求解车辆路径问题的神经组合优化算法:综合展望(Yubin Xiao,2025)
人工智能·算法·机器学习
new coder27 分钟前
[c++语法学习]Day10:c++引用
开发语言·c++·学习
无敌最俊朗@1 小时前
数组-力扣hot56-合并区间
数据结构·算法·leetcode
囚生CY1 小时前
【速写】优化的深度与广度(Adam & Moun)
人工智能·python·算法
哼?~2 小时前
C++11标准 上 (万字解析)
开发语言·c++
码农多耕地呗2 小时前
力扣94.二叉树的中序遍历(递归and迭代法)(java)
数据结构·算法·leetcode
给大佬递杯卡布奇诺2 小时前
FFmpeg 基本API avformat_alloc_context 函数内部调用流程分析
c++·ffmpeg·音视频
微笑尅乐2 小时前
BFS 与 DFS——力扣102.二叉树的层序遍历
leetcode·深度优先·宽度优先