题目要求:
按照顺时针螺旋顺序 构建一个n*n的螺旋矩阵
思路:
参照之前的54题输出螺旋矩阵的思路 将单圈拆开为四个部分。每个部分循环的长度是相同的。单圈循环完之后,起始坐标向右下移一个单位,单次循环长度减二。对于偶数阶矩阵,正常结束。对于奇数阶矩阵,因为循环长度会减到0,需要手动加入最后最中间的一个数。
如图 单圈拆分为黄红蓝绿四个部分。每个部分的长度均为2。第一圈的起始位置为(0,0)。长度=2 循环一圈之后,下一圈的起始位置为(1,1)长度为2-2 = 0 此时需要手动添加最后一位9 添加坐标就是当前的起始坐标。
对于偶数则会正常循环结束。
代码实现
class Solution:
def generateMatrix(self, n):
num = 1
row = 0
time = n-1
res = [[0]*n for _ in range(n)]
begin_x = 0
begin_y = 0
while(num<(n*n)+1):
row = begin_x
if time ==0:
res[begin_x][begin_y] = num
return res
for i in range(time):
res[row][begin_y+i] = num
if num==n*n:
return res
num+=1
col = begin_y+i+1
for j in range(time):
res[begin_x+j][col] = num
if num == n * n:
return res
num+=1
row = begin_x+j+1
for i in range(begin_y+time,begin_y,-1):
res[row][i] = num
if num == n * n:
return res
num+=1
col = i- 1
for i in range(begin_x+time,begin_x,-1):
res[i][col] = num
if num == n * n:
return res
num+=1
time-=2
begin_x+=1
begin_y+=1
print(Solution().generateMatrix(5))