leetcode48:旋转矩阵

题目

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

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

示例 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]]

提示:

  • n == matrix.length == matrix[i].length

  • 1 <= n <= 20

  • -1000 <= matrix[i][j] <= 1000

步骤 1:问题分析

题目要求:

我们需要将一个 n × n 的二维矩阵(图像)顺时针旋转 90 度,且要求在原地进行操作。这意味着我们需要在输入矩阵本身上修改,不允许借助额外的矩阵存储。

输入输出条件:
  • 输入 :一个二维矩阵 matrix,大小为 n × n ,其中 1 <= n <= 20,且矩阵中每个元素的值在 -10001000 之间。
  • 输出 :直接修改 matrix,使其成为顺时针旋转 90 度的结果。
约束与边界条件:
  1. 矩阵的大小n 的范围较小(最大为 20),因此在时间复杂度和空间复杂度上我们有一定的灵活性,可以考虑在 O(n\^2) 以内的算法。
  2. 原地旋转 :必须直接修改 matrix,不能借助另一个矩阵存储中间状态。

步骤 2:解题思路

目标描述:

顺时针旋转 90 度后的矩阵元素 (i, j) 会移动到新的位置 (j, n - i - 1)。为实现这一转换,我们可以分解成以下两步:

  1. 矩阵转置 :即将矩阵的行转换为列。此时 matrix[i][j] 变为 matrix[j][i]
  2. 水平翻转:将转置后的每一行元素反转,从而完成 90 度旋转。
具体步骤解析:
  1. 矩阵转置
    • 交换矩阵中 (i, j)(j, i) 位置的元素。
    • 只需要遍历矩阵的上三角区域(即满足 i < j 的位置),这样可以避免重复交换。
  2. 水平翻转
    • 遍历矩阵的每一行,将每一行的元素进行对称交换(即 matrix[i][j]matrix[i][n - j - 1] 互换)。
时间复杂度和空间复杂度:
  • 时间复杂度O(n\^2),因为我们需要遍历矩阵的所有元素。
  • 空间复杂度O(1),因为是原地修改,没有使用额外的空间。

这种方法在效率和空间使用上是最优的。

还有一种方法那就是利用螺旋矩阵提取出来的元素,然后在换一个边界循环填充回去.

法一:

法二:

步骤 4:算法的启发与优化

法一展示了矩阵变换的分解思路 ,即通过分步操作(转置和水平翻转)来实现整体的旋转操作。这种方法避免了重复操作和多余的空间开销。针对二维矩阵的其他旋转操作(例如逆时针 90 度),可以类比这种分解方法,通过组合不同的操作(如转置和垂直翻转)来实现。


步骤 5:实际应用

应用场景

图像和视频处理领域经常需要对二维图像矩阵进行旋转、翻转等变换。顺时针旋转 90 度在图像旋转、照片编辑、游戏引擎开发、地图视角切换等方面都十分常见。

示例应用

在一个地理信息系统(GIS)中,地图显示需要根据用户的设备方位调整视角(比如将北方置于屏幕顶部)。假设地图数据以二维矩阵的形式存储,那么可以在后台使用该算法快速旋转视图,实现顺时针调整或适应不同的用户视角。具体实现时可以先根据角度选择旋转操作,再在应用中显示旋转后的数据,提升用户的交互体验。

相关推荐
syker17 小时前
太极指令集架构(TCIS)v1.1与主流指令集比较研究报告
c++·架构
.柒宇.17 小时前
力扣hoT100之找到字符串中所有字母异位词(java版)
java·数据结构·算法·leetcode
松岛雾奈.23018 小时前
机器学习--KNN算法中的距离、范数、正则化
人工智能·算法·机器学习
兮山与18 小时前
算法33.0
算法
Brduino脑机接口技术答疑18 小时前
支持向量机(SVM)在脑电情绪识别中的学术解析与研究进展
人工智能·算法·机器学习·支持向量机·数据分析
jf加菲猫18 小时前
第1章 认识Qt
开发语言·c++·qt·ui
YoungHong199218 小时前
面试经典150题[063]:删除链表的倒数第 N 个结点(LeetCode 19)
leetcode·链表·面试
xier_ran19 小时前
深度学习:Mini-batch 大小选择与 SGD 和 GD
人工智能·算法·机器学习
王璐WL19 小时前
【数据结构】单链表的经典算法题
数据结构·算法
m0_4955627819 小时前
Swift-Enum
java·算法·swift