算法

Python实现旋转矩阵

2020-03-07  本文已影响0人  李白开水

要求:给一个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
上一篇 下一篇

猜你喜欢

热点阅读