当前位置: 首页 > news >正文

代码训练LeetCode(45)旋转图像

代码训练(45)旋转图像

Author: Once Day Date: 2025年7月11日

漫漫长路,才刚刚开始…

全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客

参考文章:

  • 48. 旋转图像 - 力扣(LeetCode)
  • 力扣 (LeetCode) 全球极客挚爱的技术成长平台

文章目录

      • 代码训练(45)旋转图像
        • 1. 原题
        • 2. 分析
        • 3. 代码实现
        • 4. 总结

1. 原题

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

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

提示:

  • n == matrix.length == matrix[i].length
  • 1 <= n <= 20
  • -1000 <= matrix[i][j] <= 1000

示例 1:

在这里插入图片描述

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

示例 2:

在这里插入图片描述

输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
2. 分析

该问题要求我们给定一个 n×n 的二维矩阵,代表一个图像,需要将图像顺时针旋转 90 度。重点在于“原地”操作,即不使用额外的存储空间来完成这个旋转。

原理分析,顺时针旋转 90 度意味着:

  • 第一行变成了最后一列。
  • 第二行变成了倒数第二列。
  • 依此类推,直到最后一行变成了第一列。

解题思路:

  1. 转置矩阵:首先对矩阵进行转置,即行列互换。转置后,matrix[i][j] 会变成 matrix[j][i]。
  2. 反转每一行:将转置后的每一行进行反转,即第一个元素和最后一个元素交换,第二个和倒数第二个交换,依此类推。

分析步骤,以 3x3 矩阵为例,进行以下操作:

原始矩阵:

1 2 3
4 5 6
7 8 9

转置后:

1 4 7
2 5 8
3 6 9

每一行反转后:

7 4 1
8 5 2
9 6 3

优化关键点:

  • 空间复杂度:由于是原地操作,不需要额外空间,空间复杂度为 O(1)。
  • 时间复杂度:操作涉及到两次遍历矩阵,时间复杂度为 O(n^2)。
3. 代码实现
void rotate(int** matrix, int matrixSize, int* matrixColSize) {// 转置矩阵for (int i = 0; i < matrixSize; i++) {for (int j = i; j < matrixSize; j++) {int temp = matrix[i][j];matrix[i][j] = matrix[j][i];matrix[j][i] = temp;}}// 反转每一行for (int i = 0; i < matrixSize; i++) {for (int j = 0; j < matrixSize / 2; j++) {int temp = matrix[i][j];matrix[i][j] = matrix[i][matrixSize - 1 - j];matrix[i][matrixSize - 1 - j] = temp;}}
}
4. 总结

这个问题考验了对矩阵操作的理解和实现能力,特别是原地修改的技术。通过实践这类问题,可以加深对数组和矩阵操作的理解,提高编程能力和对复杂问题的处理能力。

http://www.dtcms.com/a/275493.html

相关文章:

  • 【算法笔记】7.LeetCode-Hot100-图论专项
  • 【node/vue】css制作可3D旋转倾斜的图片,朝向鼠标
  • 每日算法刷题Day46 7.12:leetcode前缀和3道题和差分2道题,用时1h30min
  • 代码训练LeetCode(46)旋转图像
  • Python爬虫实战:研究python-docx库相关技术
  • AI软件出海SEO教程
  • 26. 删除有序数组中的重复项
  • Eureka实战
  • 2025.7.12总结
  • 车载以太网-TTL
  • BaseDao 通用更新方法设计与实现
  • Qt:QCustomPlot类介绍
  • Python问题记录`No module named ‘matplotlib‘` 问题解决方案
  • 精密模具大深径比微孔尺寸检测方案 —— 激光频率梳 3D 轮廓检测
  • 论文阅读:HybridTrack: A Hybrid Approach for Robust Multi-Object Tracking
  • Java 大视界 -- 基于 Java 的大数据可视化在城市生态环境监测与保护决策中的应用(344)
  • sscanf函数使用详解
  • WinSnap 6.1.1 中文版安装教程(64位)- 详细步骤图解
  • 系统分析师-计算机系统-输入输出系统
  • 如何通过多层次测试策略确保 80%+ 测试覆盖率
  • 【Spring AOP】什么是AOP?切点、连接点、通知和切面
  • SELECT ... INTO OUTFILE和LOAD DATA INFILE
  • Power Switch:用途、原理、工作方式及实现方案
  • CSS选择器进行定位
  • OneCode 3.0 DDD领域模型开放接口:基于DSMFactory的架构解析与实践指南
  • OBOO鸥柏丨满天星(MTSTAR)多媒体信息发布系统技术解析
  • Vscode中使用C++代码进行debug
  • Javaweb- 11 MVC架构模式
  • [BJDCTF2020]ZJCTF,不过如此
  • HarmonyOS从入门到精通:动画设计与实现之六 - 动画曲线与运动节奏控制