📅  最后修改于: 2023-12-03 15:23:04.204000             🧑  作者: Mango
实现一个函数,它可将传入的参数矩阵旋转90度。
def rotate_matrix(matrix: list) -> list:
pass
其中,matrix
是一个二维整数列表,描述了待旋转的矩阵。函数返回一个新的矩阵,表示旋转后的结果。
assert rotate_matrix([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]) == [[7, 4, 1],
[8, 5, 2],
[9, 6, 3]]
assert rotate_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]]
矩阵旋转问题可以通过数学方法解决。旋转90度后,新矩阵中的每个元素都和旧矩阵中的一个元素对应。可以根据它们之间的关系,将原矩阵中的元素映射到新矩阵中。
假设原矩阵的大小为m
行n
列。新矩阵的第i
行第j
列的元素,对应原矩阵的第n-j-1
行第i
列的元素。
因此,只需要遍历原矩阵中的每个元素,根据它们在新矩阵中的位置,将对应的元素放入新矩阵中即可。
def rotate_matrix(matrix: list) -> list:
m, n = len(matrix), len(matrix[0])
res = [[0] * m for _ in range(n)]
for i in range(m):
for j in range(n):
res[j][n-i-1] = matrix[i][j]
return res
以上代码实现了和数学方法类似的思路,遍历原矩阵中的每个元素,并将它们放入新矩阵中。时间复杂度为$O(mn)$。
本题的解法相对比较简单,需要注意遍历原矩阵时行列的顺序。此外,还可以用zip函数实现矩阵的转置,进而以很简洁的方式实现矩阵旋转。