欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 力扣热题100之旋转图像

力扣热题100之旋转图像

2025/5/9 2:47:45 来源:https://blog.csdn.net/weixin_64233807/article/details/147684836  浏览:    关键词:力扣热题100之旋转图像

题目

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
在这里插入图片描述

代码

关键在于能否想到这个旋转的本质就是
对于矩阵中第 i 行的第 j 个元素,在旋转后,它出现在倒数第 i 列的第 j 个位置。即:matrix_new[col][n-row-1]=matrix[row][col]
然后就是需要注意题目中的原地修改。
但是该方法使用了额外的空间,实际上仍然不符合题目。

方法一:辅助矩阵

class Solution:def rotate(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""n=len(matrix)matrix_new=[[0]*n for _ in range(n)]for row in range(n):for col in range(n):matrix_new[col][n-row-1]=matrix[row][col]matrix[:]=matrix_new#这里使用matrix[:]=matrix_new修改的是matrix本身的内容,也就是原地修改#如果使用matrix=matrix_new修改的只是matrix的指向

方法二:原地旋转

根据图中的方法推出原地旋转过程中数字的交换规律,以及需要主动枚举那些位置的数进行交换
在这里插入图片描述
需要注意的是,图中的矩阵的边为奇数和偶数的两种情况,在代码中可以用一种方式实现。

class Solution:def rotate(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""n=len(matrix)for i in range(n//2):for j in range((n+1)//2):matrix[i][j],matrix[n-j-1][i],matrix[n-i-1][n-j-1],matrix[j][n-i-1]=\matrix[n-j-1][i],matrix[n-i-1][n-j-1],matrix[j][n-i-1],matrix[i][j]

方法三:翻转

这里是对矩阵先进行水平翻转再进行主对角线翻转
只需要注意再代码实现过程中数字遍历,尤其是主对角线翻转的时候

class Solution:def rotate(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""n=len(matrix)# 水平翻转for i in range(n//2):for j in range(n):matrix[i][j],matrix[n-i-1][j]=matrix[n-i-1][j],matrix[i][j]# 主对角线反转for i in range(n):for j in range(i):matrix[i][j],matrix[j][i]=matrix[j][i],matrix[i][j]

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词