解
https://blog.csdn.net/happyaaaaaaaaaaa/article/details/51542934
- 四种遍历 及其 坐标更新方式
- left to right
- x += 0
- y += 1
- up to down
- x += 1
- y += 0
- right to left
- x += 0
- y -= 1
- down to up
- x -= 1
- y += 0
- left to right
- 一轮 四种遍历 后,将坐标更新到新一轮的初始位置 x += 1 y += 1
- 初始步长 step = n - 1, 之后更新步长 step -= 2
- n为奇数时,最后四种遍历完之后,再添加处于最中间的数
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
result = [[0 for j in range(n)] for i in range(n)]
x = 0
y = 0
num = 1
# 定义螺线坐标变化
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
step = n - 1
while step > 0:
for i in range(4):
for j in range(step):
result[x][y] = num
# 更新坐标
x += dx[i]
y += dy[i]
# 更新数值
num += 1
# 四种变换之后 更新坐标到新的起始点
x += 1
y += 1
# 更新步长
step -= 2
# 当n为奇数时, 再添加一个处于最中间的数
if step == 0:
result[x][y] = num
return result