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°的原地操作是矩阵类题目的经典模板,转置+水平翻转的组合是最简洁高效的实现方式。
相关推荐
卷福同学2 小时前
不用服务器,不用配环境,我10分钟上线了一个AI Agent
人工智能·后端·算法
问君能有几多愁~4 小时前
C++ 数据结构复习笔记
数据结构·c++·笔记
至乐活着4 小时前
深入解析跳表SkipList:原理、实现与性能优化实战
数据结构·算法·跳表·skiplist·java实现
r_oo_ki_e_5 小时前
Java Map 集合学习笔记
java·笔记·学习
Jerry5 小时前
LeetCode 383. 赎金信
算法
ai产品老杨5 小时前
H264 H265视频分析常见问题和排查清单
人工智能·算法·音视频
Jerry6 小时前
LeetCode 454. 四数相加 II
算法
liuyicenysabel6 小时前
大模型学习笔记 · 第八篇 · 进阶:偏好对齐与多卡训练
人工智能·笔记·学习
可编程芯片开发6 小时前
基于CPS-SPWM链式STATCOM系统在电压不平衡环境下控制策略的simulink建模与仿真
算法
Jerry7 小时前
LeetCode 202. 快乐数
算法