59. 螺旋矩阵 II
给你一个正整数 n
生成一个包含 1
到 n^2
所有元素,且元素按顺时针顺序螺旋排列的n x n
正方形矩阵 matrix。
- 设置起始点为
(x, y)
, 每转一圈就更新起始点。 - 一共要转
loop = n // 2
次。 - 采用左闭右开的原则。
n
为奇数时,需要加上中间那个数。
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
matrix=[[0] * n for _ in range(n)]
count=1
x = y = 0 #作为起始点
loop = n // 2 # 用于记录循环次数,也就是需要转多少圈
for cir in range(loop):
for j in range(y, n - cir - 1):
matrix[x][j] = count
count += 1
for i in range(x, n - cir -1):
matrix[i][n - cir - 1] = count
count += 1
for j in range(n - cir - 1, y, -1):
matrix[n - cir - 1][j] = count
count += 1
for i in range(n - cir - 1, x, -1):
matrix[i][x] = count
count += 1
x += 1
y += 1
#如果n为奇数,需要填中间那个格子
if (n % 2 != 0):
matrix[loop][loop] = count
return matrix
细节:
- 不要忘记
range
的那个-1
。 for
和range
的组合不会让遍历元素加一或减一,而while
会。
for i in range(0,2):
pass
print(i) #1
i = 0
while i < 2:
i += 1
print(i) #2