题目:
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
思路:
把res换成[[0]*n]*n,会得到错误的结果
解答:
方法一:
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
num=1
res = [[0 for _ in range(n)] for _ in range(n)]
up,bottom,left,right=0,n-1,0,n-1
while num<=n*n:
for i in range(left,right+1):
res[up][i]=num
num+=1
up+=1
for i in range(up,bottom+1):
res[i][right]=num
num+=1
right-=1
for i in range(right,left-1,-1):
res[bottom][i]=num
num+=1
bottom-=1
for i in range(bottom,up-1,-1):
res[i][left]=num
num+=1
left+=1
return res
方法二:
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
matrix=[[0]*n for _ in range(n)]
count = (n+1) // 2 # 总共有多少层
num=1
res = [] # 保存结果
for lr in range(count):
start = lr # 该层左上角的位置(start, start)
last_col = n-1-lr # 该层最后一列的索引
last_row = n-1-lr # 该层最后一行的索引
for c in range(start, last_col+1): # from left to right
matrix[start][c]=num
num+=1
for r in range(start+1,last_row+1): # from top to bottom
matrix[r][last_col]=num
num+=1
if last_row != start and last_col != start:
for c in range(last_col-1, start-1, -1): # from right to left
matrix[last_row][c]=num
num+=1
for r in range(last_row-1, start, -1): # from bottom to top
matrix[r][start]=num
num+=1
return matrix