LeetCode:59. 螺旋矩阵 II(python)

╄→гoц情女王★ 提交于 2019-11-29 00:15:32

LeetCode:59. 螺旋矩阵 II(python)

给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]

LeetCode 链接

思路

  • 设置顺时针方向
  • 遍历矩阵,根据边界和是否访问过该节点来更新方向

附代码(Python):

class Solution:
    def generateMatrix(self, n):
        # 顺时针方向(右下左上)
        dx = [0, 1, 0, -1]
        dy = [1, 0, -1, 0]
        dn = 0                              # 方向指针
        
        res = [[0]*n for _ in range(n)]    # 初始化
        x = y = 0                           # 位置
        for i in range(1, n*n+1):
            res[x][y] = i

            # 下一步位置
            temp_x = x + dx[dn]
            temp_y = y + dy[dn]
            # 判断下一步位置是否合理,若合理则更新位置,若不合理则改变方向并更新位置
            if 0<=temp_x<n and 0<=temp_y<n and res[temp_x][temp_y]==0:
                x, y = temp_x, temp_y
            else:
                dn = (dn+1) % 4
                x += dx[dn]
                y += dy[dn]
        return res
test = Solution()
n = 3
test.generateMatrix(n)
[[1, 2, 3], [8, 9, 4], [7, 6, 5]]
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!