旺崽的博客

要么天赋异禀,要么天道酬勤

0%

LeetCode 59 螺旋矩阵 II

题目链接

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

示例 1:

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

示例 2:

1
2
输入:n = 1
输出:[[1]]

螺旋填数有一些性质我们必须要知道:

  • 在填数的过程中有上,下,左,右四个边界,且这四个边界会逐渐缩至一个点
  • 填数始终遵循以下顺序(顺时针):
    a.从左到右
    b.从上到下
    c.从右到左
    d.从下到上

了解上述性质后我们可以设置四个边界变量,然后按填数顺序不断填数即可,AC代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
L, R, U, D = 0, n - 1, 0, n - 1
ans = [[0 for i in range(n)] for i in range(n)]
num, cnt = 1, n * n
while num <= cnt:
for i in range(L, R + 1):
ans[U][i] = num
num += 1
U += 1
for i in range(U, D + 1):
ans[i][R] = num
num += 1
R -= 1
for i in range(R, L - 1, -1):
ans[D][i] = num
num += 1
D -= 1
for i in range(D, U - 1, -1):
ans[i][L] = num
num += 1
L += 1
return ans