跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Javajava算法

LeetCode 48 旋转图像:二维矩阵原地顺时针旋转 90 度

综述由AI生成给定 n x n 二维矩阵表示图像,要求原地顺时针旋转 90 度。核心思路是将矩阵变换分解为两步几何操作:首先沿主对角线翻转(转置),使行变列;随后对每一行进行左右镜像翻转。此方法避免了创建新矩阵,时间复杂度为 O(N^2),空间复杂度为 O(1)。相比直接计算坐标变换公式,分步翻转逻辑清晰、不易出错,适合面试场景。代码实现采用 Java 语言,包含详细步骤图解与关键点解析。

晚风告白发布于 2026/3/15更新于 2026/4/2718 浏览
LeetCode 48 旋转图像:二维矩阵原地顺时针旋转 90 度

LeetCode 48 旋转图像

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

示例图片

解题思路

该方法利用矩阵变换的数学性质,分为两步简单的几何变换:

  1. 主对角线翻转(矩阵转置): 将 (i, j) 变为 (j, i)。此时,行变成了列。
  2. 左右镜像翻转: 将 (j, i) 变为 (j, n - 1 - i)。此时,每一行的元素顺序颠倒。

结论: (i, j) → 转置 → (j, i) → 左右翻转 → (j, n - 1 - i)。这刚好完成了顺时针 90 度旋转。

图解步骤(以 3x3 矩阵为例)

假设原始矩阵如下:

1 2 3 4 5 6 7 8 9 
第一步:沿主对角线翻转

主对角线就是从左上角到右下角的这条线(1, 5, 9)。我们将对角线两侧的元素进行两两交换:

  • 2 和 4 交换
  • 3 和 7 交换
  • 6 和 8 交换

变化后的矩阵:

1 4 7 2 5 8 3 6 9 

此时观察:原来的第一行 [1,2,3] 变成了现在的第一列。

第二步:每一行左右镜像翻转

对每一行进行反转(Reverse):

  • 第一行 [1, 4, 7] 变成 [7, 4, 1]
  • 第二行 [2, 5, 8] 变成 [8, 5, 2]
  • 第三行 [3, 6, 9] 变成 [9, 6, 3]

变化后的矩阵:

7 4 1 8 5 2 9 6 3 

结果完成!这正是原矩阵顺时针旋转 90 度后的样子。

代码实现细节(Java 示例)

class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        // 1. 沿主对角线翻转
        // 注意:j 从 i + 1 开始,只处理右上半部分,避免重复交换
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }
        // 2. 每一行进行左右翻转
        // 每一行只遍历到一半 (n / 2)
        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;
            }
        }
    }
}

关键点总结(面试常考)

Q1:为什么第一步循环里 j 要从 i + 1 开始?

如果 j 从 0 开始遍历到 n,当你处理到 matrix[1][0] 时,它会和 matrix[0][1] 交换;但当你处理到 matrix[0][1] 时,它又会和 matrix[1][0] 交换回去。结果就是矩阵没变。

主对角线上面的元素 → 严格满足 行号 < 列号(i < j)

主对角线下面的元素 → 严格满足 行号 > 列号(i > j)

所以我们只遍历'右上三角形'的区域,把它们和'左下三角形'对应的位置交换。

Q2:如果是逆时针旋转 90 度怎么办?

有两种常见的分解方法:

  • 方案 A: 先左右翻转,再沿主对角线翻转。
  • 方案 B: 先沿主对角线翻转,再上下翻转。
Q3:这种方法的时空复杂度?
  • 时间复杂度: $ O(N^2) $。转置需要遍历约 $ N^2/2 $ 次,左右翻转需要遍历 $ N^2/2 $ 次,总共还是 $ O(N^2) $。
  • 空间复杂度: $ O(1) $。所有操作都在原数组上完成,不需要额外空间。暴力方法通常需要额外空间存储新矩阵。

为什么推荐这个方法?

在面试中,直接写'四数交换'的公式(方法二)非常容易记错下标(比如把 n-1-i 写成 n-i),一旦写错,调试会非常痛苦。而方法一步骤清晰,每一块逻辑都很简单,极难出错,是代码鲁棒性(Robustness)最高的选择。

鲁棒性(Robustness)是计算机科学中一个非常重要的概念,它是英文 Robust 的音译(也有人称之为'健壮性'或'稳定性')。

目录

  1. LeetCode 48 旋转图像
  2. 解题思路
  3. 图解步骤(以 3x3 矩阵为例)
  4. 第一步:沿主对角线翻转
  5. 第二步:每一行左右镜像翻转
  6. 代码实现细节(Java 示例)
  7. 关键点总结(面试常考)
  8. Q1:为什么第一步循环里 j 要从 i + 1 开始?
  9. Q2:如果是逆时针旋转 90 度怎么办?
  10. Q3:这种方法的时空复杂度?
  11. 为什么推荐这个方法?
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • DeOldify 图像上色:黑白漫画转赛博朋克/水墨/油画风格
  • VSCode Copilot 配置 DeepSeek 模型
  • 量化、算子融合与内存映射:C 语言实现边缘 AI 推理的三大核心优化
  • 微信小程序自定义 tabBar 实现方案
  • PCTF2025 Web 安全挑战解题报告(下)
  • Python 体育数据爬虫:基于 Playwright 与异步技术的高性能采集
  • 前端国际化最佳实践:使用 i18next 实现多语言支持
  • Agent AI 技术原理与工程实践指南
  • WebP 格式简记
  • 宇树 Qmini 双足机器人训练经验总结
  • 非科班转码者的 AI 学习路径:从 0 到 1
  • Python 临床知识问答与检索系统架构及实现
  • VS2022 中 C++ 导入第三方库的方法与常见问题
  • 基于 Trae 与 Vizro 的低代码数据可视化仪表板构建方案
  • 搭建支持情感控制的二次封装 TTS 服务
  • OpenClaw 钉钉群聊多机器人配置指南
  • VS Code Copilot 完整使用指南:从入门到进阶
  • ibbot(智体机灵):国产开源AI智能体平台的全面解析
  • WebP 格式简记
  • 宇树 G1 人形机器人 VR 遥操与 IL 开发:从 xr_teleoperate 到 unitree_IL_lerobot

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online