《代码随想录》学习笔记,原链接:代码随想录
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
val, start = 1, 0 # 构建螺旋矩阵开始位置的下标start,以及要填入的值val
result = [[0] * n for _ in range(n)] # 构建螺旋矩阵
for circle in range(1, n // 2 + 1): # 构建一个n*n的矩阵,需要转n // 2 + 1圈
for i in range(start, n - circle): # 向右(左闭右开)
result[start][i] = val
val += 1
for i in range(start, n - circle): # 向下(左闭右开)
result[i][n - circle] = val
val += 1
for i in range(n - circle, start, -1): # 向左(左闭右开)
result[n - circle][i] = val
val += 1
for i in range(n - circle, start, -1): # 向上(左闭右开)
result[i][start] = val
val += 1
start += 1 # 一圈循环结束,下一圈循环的开始位置start要+1
if n % 2 != 0: # 由于是左闭右开,所以当n为奇数时,最中心的元素无法通过循环赋值,需要单独处理
result[start][start] = val # 赋值的位置是最有一圈的起始位置start
return result
【注】当n为奇数时,需要对于最中心的元素进行单独的赋值操作