1.螺旋矩阵
给你一个正整数
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
2.螺旋矩阵
给你一个
m
行n
列的矩阵matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
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
3.螺旋遍历二维数组
给定一个二维数组
array
,请返回「螺旋遍历」该数组的结果。螺旋遍历 :从左上角开始,按照 向右 、向下 、向左 、向上 的顺序 依次 提取元素,然后再进入内部一层重复相同的步骤,直到提取完所有元素。
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