Skip to main content

59. 螺旋矩阵 II [hard]

59. 螺旋矩阵 II [hard]

https://leetcode-cn.com/problems/spiral-matrix-ii/

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

示例:

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

通过次数40,970 | 提交次数52,683

First Try

2020-07-28

还是跟0054一样的思路,直接模拟贪吃蛇一路往前走。并且由于可以直接在rv中进行标记是否访问过,不需要额外提供visited矩阵。

class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:

directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
dir_idx = 0
i, j = 0, 0
rv = [[""] * n for _ in range(n)]

for val in range(1, n ** 2 + 1):
rv[i][j] = val
step_i, step_j = directions[dir_idx]
ni, nj = i + step_i, j + step_j
if ni < 0 or ni >= n or nj < 0 or nj >= n or rv[ni][nj] != "":
dir_idx = (dir_idx + 1) % 4
step_i, step_j = directions[dir_idx]
i, j = i + step_i, j + step_j

return rv
  • 执行用时:48 ms, 在所有 Python3 提交中击败了22.06%的用户
  • 内存消耗:13.5 MB, 在所有 Python3 提交中击败了14.29%的用户