Leetcode Link: 59. 螺旋矩阵 II - 力扣(LeetCode)
题目
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵matrix 。

解法一
思路: 本题就是模拟的思路,但是边界判断麻烦的一批。
为了避免这种情况,再确定边界及边界端点包含情况的时候,一定要确保
- 边界长度都相等
- 边界都遵循左闭右开或者左闭右闭。
如果一会边界+1,一会边界-1,一会包含右边界一会不包含,一定会报错!
本题中,我们大概就是这样遍历的

题解:
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
matrix = [[0 for _ in range(n)] for _ in range(n)]
num = 1
# 定义上下左右的边界
# 填写每一个边界的时候,都需要注意左开右闭!否则一定自己乱了!
up = left = 0
down = right = n-1
while(num<=n*n):
row = up
for col in range(left, right):
matrix[row][col] = num
num += 1
col = right
for row in range(up, down):
matrix[row][col] = num
num += 1
row = down
for col in range(right, left, -1):
matrix[row][col] = num
num += 1
col = left
for row in range(down, up, -1):
matrix[row][col] = num
num += 1
# 当边界收缩到一起,变成一个格子的时候,不添加下面的东西会报错
# for _ in (a,a) -> 不会进入这种循环,所以需要这个中心的判定。
if up == down and left == right:
matrix[up][left] = num
num += 1
# 这一步必须放在最后
# 之前放在了中心判断的前面,当输入1时会错(奇数)
up += 1
down -= 1
left += 1
right -= 1
return matrix