python旋转_Python实现旋转矩阵

要求:给一个n×n的数组,旋转90度。

手动画个丑图:

image.png

简单思路(顺时针):

如图四个红框为一个layer,每次旋转一个layer,layer的范围是(0,len(nums)/2)

在第一个layer循环中,要将四角的元素按一下顺序旋转(0,0)转到(0,3)转到(3,3)转到(3,0)转到(0,0)

如果直接按照这个顺序,前一个值会将后一个值直接覆盖掉,所以先用一个临时的tmp将首个元素存起来,然后按照

(3,0)转到(0,0)

(3,3)转到(3,0)

(0,3)转到(3,3)

(0,0)转到(0,3)

tmp转到(0,0)

这样的顺序旋转。

first是每个红框中的第一个元素,last为最后一个。

offset记录了当前旋转到了红框中的第几个元素。

完整代码:

def rotate(matrix):

n = len(matrix)

for laryer in range(0, n / 2):

first = laryer

last = n - 1 - laryer

for i in range(first, last):

offset = i - first

tmp = matrix[first][i]

# 左侧一列移到顶部

matrix[first][i] = matrix[last - offset][first]

# 底部一行移到左侧

matrix[last - offset][first] = matrix[last][last - offset]

# 右侧一列移到底部

matrix[last][last - offset] = matrix[i][last]

# 顶部一行移到右侧

matrix[i][last] = tmp

return matrix

矩阵(测试用例):

matrix = [[0, 1, 2, 3, 4],

[5, 6, 7, 8, 9],

[10, 11, 12, 13, 14],

[15, 16, 17, 18, 19],

[20, 21, 22, 23, 24]]

输出:

image.png

你可能感兴趣的:(python旋转)