LeetCode 补拙笔记 日期:2026.05.26 题目:48. 旋转图像

LeetCode 补拙笔记

0. 前言

  • 日期:2026.05.26
  • 题目:48. 旋转图像
  • 难度:中等
  • 标签:数组、矩阵、原地算法

1. 题目理解

问题描述

给定一个 n × n 的二维矩阵 matrix,将其原地顺时针旋转 90 度,不能使用额外矩阵空间。

示例

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]

输出:[[7,4,1],[8,5,2],[9,6,3]]

2. 解题思路

核心观察

  • 顺时针旋转90°可以分解为两步操作:
    1. 矩阵转置(主对角线交换元素)
    2. 每一行水平翻转(左右镜像)
  • 两步操作均为原地操作,无需额外矩阵空间。

算法步骤

  1. 对矩阵进行转置:遍历上三角区域,交换 matrix[i][j]matrix[j][i]
  2. 对每一行进行水平翻转:遍历每一行的前半部分,交换 matrix[i][j]matrix[i][n-1-j]

3. 代码实现

java 复制代码
package lc48;

class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        //转置
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n ; j++) {
                int temp = matrix[i][j];
                matrix[i][j]=matrix[j][i];
                matrix[j][i]=temp;
            }
        }
        //垂直镜像
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n/2 ; j++) {
                int temp = matrix[i][j];
                matrix[i][j]=matrix[i][n-1-j];
                matrix[i][n-1-j]=temp;
            }
        }
    }
}

4. 代码优化说明

减少分支判断,合并变量声明,代码更紧凑:

java 复制代码
package lc48;

class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        // 矩阵转置
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }
        // 水平翻转每一行
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n / 2; j++) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[i][n - 1 - j];
                matrix[i][n - 1 - j] = temp;
            }
        }
    }
}

5. 复杂度分析

  • 时间复杂度 :O(n2)O(n^2)O(n2)
    两次遍历矩阵,总操作次数为 n2n^2n2 级。
  • 空间复杂度 :O(1)O(1)O(1)
    仅使用常数级临时变量,原地修改矩阵。

6. 总结

  • 核心思路:转置 + 水平翻转,将旋转问题拆解为两个简单的原地操作;
  • 优化后代码逻辑更紧凑,减少了冗余变量和分支,可读性更高;
  • 关键技巧:顺时针旋转90°的原地操作是矩阵类题目的经典模板,转置+水平翻转的组合是最简洁高效的实现方式。
相关推荐
李帅朋6 小时前
微分基本定义笔记
人工智能·笔记·深度学习·神经网络
政企项目老覃8 小时前
大模型幻觉治理与自动评测:金融风控场景的落地实践
人工智能·算法·机器学习
淡海水9 小时前
08-03-不可变-ImmutableDictionary-TKey-TValue-与ImmutableHashSet-T-持久化哈希树
数据结构·算法·c#·哈希算法·dictionary·immutable
hansang_IR9 小时前
【题解】[APIO2023] 赛博乐园 / cyberland
c++·算法·图论
xian_wwq9 小时前
【学习笔记】深度认知系列-第16讲-提示词工程
人工智能·笔记·学习
洛阳纸贵9 小时前
MATLAB-matlab基础知识
学习·算法·matlab
落羽的落羽9 小时前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法
Nil20810 小时前
leetcode 17电话号码的字母组合
算法·leetcode·职场和发展
youm200310 小时前
认识Redis
redis·笔记·学习