【发布时间】:2019-07-21 12:52:33
【问题描述】:
给定一个由 nxn 矩阵表示的图像,其中图像中的每个像素为 4 个字节,编写一个将图像旋转 90 度的方法。 (到位)
我做了低效的解决方案,将每一行复制到一个临时然后执行交换,占用 o(N) 空间,下面的实际解决方案更好,但我不明白。
def rotate_matrix(matrix):
'''rotates a matrix 90 degrees clockwise'''
n = len(matrix)
for layer in range(n // 2):
first, last = layer, n - layer - 1
for i in range(first, last):
# save top
top = matrix[layer][i]
# left -> top
matrix[layer][i] = matrix[-i - 1][layer]
# bottom -> left
matrix[-i - 1][layer] = matrix[-layer - 1][-i - 1]
# right -> bottom
matrix[-layer - 1][-i - 1] = matrix[i][- layer - 1]
# top -> right
matrix[i][- layer - 1] = top
return matrix
以上代码是Python解决方案,
我不明白 for 循环,为什么它在 n//2 范围内,从 first 到 n-layer-1。
另外,为什么这个问题提到了这4个字节似乎是无用的信息。
谢谢!
【问题讨论】:
-
在 python
4 bytes中并不重要,但在其他语言中,您可能必须知道要保留多大的数组才能复制值。 -
它使用
n // 2,因为它替换了大小为(n // 2, n // 2)的正方形中的像素,
标签: python arrays python-3.x matrix rotation