题目链接:https://leetcode.cn/problems/spiral-matrix-ii/

核心思想:模拟
填充上行从左到右
填充右列从上到下
填充下行从右到左
填充左列从下到上
左闭右开
class Solution(object):
def generateMatrix(self, n):
nums = [[0]* n for _ in range(n)]
startx,starty = 0,0
loop,mid = n//2,n//2
count = 1
for offset in range(1,loop+1):
for i in range(starty,n-offset):
nums[startx][i] = count
count += 1
for i in range(startx,n-offset):
nums[i][n-offset] = count
count += 1
for i in range(n-offset,starty,-1):
nums[n-offset][i] = count
count += 1
for i in range(n-offset,startx,-1):
nums[i][starty] = count
count += 1
startx += 1
starty += 1
if n % 2 != 0:
nums[mid][mid] = count
return nums
解析:
nums = [[0]* n for _ in range(n)]:建二维列表(即n×n的矩阵)并初始化为全0
startx,starty:起始(x,y)位置
loop:转圈数 mid :中心位置
count:开始数
startx += 1 starty += 1:每一圈完成后,起始位置就从(0,0)到(1,1)的下一个内圈