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°的原地操作是矩阵类题目的经典模板,转置+水平翻转的组合是最简洁高效的实现方式。
相关推荐
cao233311 小时前
关于 y0 y1 yn 变量名冲突说法的指正
笔记
zyl76515 小时前
FlashAttention 详解:从 GPU 硬件、普通 Attention 到分块计算与 Online Softmax
算法
爱读书的小胖19 小时前
LeetCode 122:买卖股票的最佳时机 II(C)解题分析
算法
结局无敌19 小时前
React Native for OpenHarmony 实战:三方库 react-native-modal-dialog 的鸿蒙化适配指南
深度学习·算法·react native·react.js·harmonyos
~patience~20 小时前
WAV 逆向分析工具使用笔记
笔记
滴啦嘟啦哒20 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
OPEN-F20 小时前
ROS2系列教程:上位机建图与导航(原理综合)
算法·机器人
weixin_3077791320 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
xier_ran20 小时前
【infra之路】AI 编译器学习笔记(十三):AI 编译器全景——TVM、XLA、IREE 与其他
人工智能·笔记·学习
连山齐名20 小时前
ai应用开发的学习笔记
服务器·笔记·学习