本文已参与「新人创作礼」活动,一起开启掘金创作之路。
48.旋转图像
- 题号:力扣48
- 知识点:矩阵
- 总结
题干:
思路:
- 1.看到题目第一个思路是按照59题:螺旋矩阵2和54题:螺旋矩阵类似的思路,把矩阵从最右上角的位置螺旋填入即可,但是题目中要求in-place,即不能使用新建矩阵的方式。题目的本意并不是让我们用这种方法。
- 2.仔细观察矩阵变换前后的规律,其实是矩阵转置操作和逆序操作的结合。剩下的实现方法就比较简单了,但是要注意不能使用另一个矩阵
- 3.第一步先实现矩阵的转置,按照定义a是b的转置,满足
a[i][j] = b[j][i] - 4.这里转置实现的方式是交换对角线对称的两个元素
matrix[i][j] = matrix[j][i],类似交换两数之值的方法,temp为临时变量 - 5.转置之后再对第二维做逆序即可通过
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
# 1.转置
# 2.逆序
l = len(matrix)
temp = 0
for i in range(0, l):
for j in range(0, l):
temp = int(matrix[i][j])
matrix[i][j] = matrix[j][i]
matrix[j][i] = temp
if i == j:
break
# [[1,4,7],[2,5,8],[3,6,9]]
# 再逆序
for i in range(0, l):
matrix[i] = matrix[i][::-1]
# [[7,4,1],[8,5,2],[9,6,3]]
参考: 题解中有人总结了类似题目的做法:
- 顺时针旋转90:先沿对角线反转矩阵,再沿竖中轴线反转矩阵;
- 顺时针旋转180:先沿横中轴线反转矩阵,再沿竖中轴线反转矩阵;
- 顺时针旋转270:先沿对角线反转矩阵,再沿横中轴线反转矩阵;