给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
复制代码
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
复制代码
def generateMatrix(n):
nums=[[0]*n for _ in range(n)]
start_x=0
start_y=0
offset=1
s=n//2 要进行的圈数
count=1 # 从1开始进行螺旋
loop = n//2
for offset in range(1, loop + 1) :
for i in range(start_x,n-offset): #从左到右
nums[start_x][i]=count
count+=1
for i in range(start_y,n-offset): #上到下
nums[i][n-offset]=count
count+=1
for i in range(n-offset,start_y,-1): #从右到左
nums[n-offset][i]=count
count+=1
for i in range(n-offset,start_x,-1): # 从上到下
nums[i][start_y]=count
count+=1
start_x+=1
start_y+=1
if s%2!=0:
nums[s][s]=n**2
return nums
def spiralOrder(matrix):
l,r,t,b=0,len(matrix[0])-1,0,len(matrix)-1
nums=[]
while True:
for i in range(l,r+1):
a.append(martix[t][i])
t+=1
if t>b:
break
for i in range(t,b+1):
a.append(martix[r][i])
r-=1
if l>r:
break
for i in range(r,l-1,-1):
a.append(matrix[b][i])
b-=1
if t>b:
break
for i in range(b,t-1,-1):
a.append(martix[i][l])
l+=1
if l>r:
break
return nums
def spiraarry(array):
if array==[]:
return []
nums=[]
l,r,t,b=0,len(array[0])-1,0,len(array)-1
while True:
for i in range(l,r+1):
nums.append(array[t][i])
t+=1
if t>b:
break
for i in range(t,b+1):
nums.append(array[i][r])
r-=1
if l>r:
break
for i in range(r,l-1,-1):
nums.append(array[b][i])
b-=1
if t>b:
break
for i in range(b,t-1,-1):
nums.append(array[i][l])
l+=1
if l>r:
break
return nums