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

代码训练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.xdnf.cn/news/15161.html

相关文章:

  • 知识蒸馏中的教师模型置信度校准:提升知识传递质量的关键路径
  • git版本发布
  • 企业选择大带宽服务器租用的原因有哪些?
  • 电商广告市场惊现“合规黑洞”,企业如何避免亿元罚单
  • Python后端项目之:我为什么使用pdm+uv
  • Java文件传输要点
  • QT跨平台应用程序开发框架(6)—— 常用显示类控件
  • 关于wpf的自适应
  • Elasticsearch 线程池
  • 【八股消消乐】Kafka集群 full GC 解决方案
  • 数据湖和数据库对比
  • Linux->基础IO
  • DVWA靶场通关笔记-反射型XSS(Reflected High级别)
  • 亚矩阵云手机:重构物流供应链,让跨境包裹“飞”得更快更准
  • (C++)STL标准库(vector动态数组)(list列表)(set集合)(map键值对)相关对比,基础教程
  • Linux中Gitee的使用
  • 杭州乐湾科技有限公司的背景、产品体系与技术能力的全方位深度分析
  • 三维点云Transformer局部感受野构建:理论、方法与挑战
  • C++类模版1
  • Redis Cluster 手动部署(小白的“升级打怪”成长之路)
  • Vue》》总结
  • 用YOLOv5系列教程(1)-用YOLOv5轻松实现设备状态智能监控!工业级教程来了
  • 11. JVM中的分代回收
  • C语言习题三
  • 玩转rhel9 Apache
  • 贪心算法题解——划分字母区间【LeetCode】
  • Tom 和 Jerry 的网格迷宫大冒险
  • 深入理解设计模式:原型模式(Prototype Pattern)
  • Spring Boot 应用中,配置的加载优先级
  • 前端MQTT入门指南:从零到实战的完整流程