def rotate(self, matrix):
n = len(matrix)
for i in range(n):
for j in range(i+1, n):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
for i in range(n):
matrix[i].reverse()
return matrix下面是Python中矩阵/图像旋转函数的代码。这适用于所有的情况,我不知道为什么。有人能给我解释一下为什么会起作用吗,因为我似乎找不到一个简单的解决方案,在网上也是简略的和节奏式的。
发布于 2019-08-15 00:52:11
例如,如果从以下矩阵开始:
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]在第一个嵌套的for循环块中,它基本上转换了矩阵:
[[1, 4, 7],
[2, 5, 8],
[3, 6, 9]]然后将每一行顺时针旋转90度:
[[7, 4, 1],
[8, 5, 2],
[9, 6, 3]]另外,这将是一种更短(也可能更快)的方法:
def rotate(self, matrix):
return list(zip(*reversed(matrix)))这基本上是一样的,但是使用内置函数zip来转换矩阵和简洁的列表理解。它还可以旋转矩形矩阵。主要区别在于,原始代码修改了函数参数(matrix),执行就地旋转,因此空间复杂度较低。
您也可以实现逆时针旋转:
def rotate_ccw(self, matrix):
return list(reversed(zip(*matrix)))https://stackoverflow.com/questions/57503605
复制相似问题