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