📅  最后修改于: 2023-12-03 15:39:19.804000             🧑  作者: Mango
矩阵的向右旋转是指将矩阵的每一行向右移动K个位置,空出的位置用0来填充。这种旋转可以通过转置矩阵,然后再把每一行翻转来实现。本题的目的就是实现这种矩阵旋转操作。
我们可以先对每一行做一个右移K的操作,使用循环队列来存储每一行,然后再将这些行直接拼接起来。
时间复杂度:$O(NM)$,其中N和M分别表示矩阵的行数和列数。
def rotate(matrix: List[List[int]], k: int) -> List[List[int]]:
n, m = len(matrix), len(matrix[0])
res = []
for row in matrix:
q = collections.deque(row)
q.rotate(k)
res.append(list(q))
return res
我们可以先将矩阵进行转置操作,然后再将每一行翻转即可。
时间复杂度:$O(NM)$,其中N和M分别表示矩阵的行数和列数。
def rotate(matrix: List[List[int]], k: int) -> List[List[int]]:
n, m = len(matrix), len(matrix[0])
# 转置矩阵
for i in range(n):
for j in range(i, m):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
# 翻转每一行
for i in range(n):
matrix[i] = matrix[i][::-1]
# 对于k >= m的情况,相当于右移了k % m次
k %= m
# 翻转每一行
for i in range(n):
matrix[i] = matrix[i][-k:] + matrix[i][:-k]
return matrix
本题涉及到了比较基础的矩阵操作,熟练掌握这些操作是程序员的基本功。在代码实现方面,我们可以使用循环队列来处理每一行的操作,也可以使用Python内置的切片来完成对每一行的移动和翻转。