class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
if not n:
return []
res = [[0]*n for _ in range(n)]
l,r,t,b = 0,n-1,0,n-1
nums = [i for i in range(1,n*n+1)]
index=0
while True:
#先从左往右打印,打印一行top就增加1,第二轮转过来肯定到第三行去了
for i in range(l, r + 1):
res[t][i] = nums[index]
index+=1
t += 1
#如果top都大于bottom 说明循环就结束了
if t > b:
break
#从上往下打印,当然横坐标是top+1开始,top层已经遍历过了
for i in range(t, b + 1):
res[i][r] = nums[index]
index+=1
#遍历完右边这一列,右边的边界不得不减1
r -= 1
#如果左边界大于右边界循环结束
if l > r:
break
#从右往左得起始坐标当然是r-1,因为右边那一列已经遍历结束了
for i in range(r, l - 1, -1):
res[b][i] = nums[index]
index+=1
#遍历完下边得一层bottom自然而然要减去1
b -= 1
#再次判断top和bottom的大小关系
if t > b:
break
#从下往上,起始坐标当然是b-1.bottom已经遍历结束
for i in range(b, t - 1, -1):
res[i][l] = nums[index]
index+=1
#左侧遍历完l就要往右移动一下
l += 1
#如果左边大于右边那就结束遍历
if l > r:
break
return res
- 对于螺旋矩阵的话就是从四个方向分别遍历即可
- 从左到右,判断上下边界
- 从上到下,判断左右边界
- 从右到左,判断上下边界
- 从下到上,判断左右边界