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°的原地操作是矩阵类题目的经典模板,转置+水平翻转的组合是最简洁高效的实现方式。
相关推荐
一只小菜鸡..10 小时前
南京大学 操作系统 (JYY) 学习笔记:进程、系统调用与状态机管理
笔记·学习
DeviceHub10 小时前
硬件工程师选型笔记:ALPS RK12L1230C0K 与 Tonevee RK12L1230C0K 电位器 PIN TO PIN 评估指南
笔记
徐小夕11 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
whyTeaFo11 小时前
GAMES101: Lecture 13: Ray Tracing 1 (Whitted-Style Ray Tracing) ppt笔记
笔记
可编程芯片开发12 小时前
UPFC统一潮流控制器的simulink建模与仿真
算法
小小仙子12 小时前
矢量网络分析仪如何测试S参数的?
人工智能·算法·机器学习
中微极客14 小时前
降维算法75倍加速:从PCA到稀疏字典学习的工程实践
人工智能·学习·算法
storyseek14 小时前
前缀和实现Kogge-Stone算法
数据结构·算法
元Y亨H15 小时前
开发者必须掌握的十大核心算法
算法