递归方法 classSolution: defspiralOrder(self, matrix: List[List[int]]) -> List[int]: m=len(matrix) if m==0orlen(matrix[0])==0: return [] n=len(matrix[0]) newlist=matrix[0] if m>1:
for i inrange(1,m): newlist.append(matrix[i][n-1])
for j inrange(n-2,-1,-1): newlist.append(matrix[m-1][j]) if n>1: for i inrange(n-2,0,-1): newlist.append(matrix[i][0]) M=[] for k inrange(1,m-1): t=matrix[k][1:-1] M.append(t)
思路清晰方法: classSolution: defspiralOrder(self, matrix: List[List[int]]) -> List[int]: res=[] iflen(matrix)==0: return [] #定义四个边界点 left=0 right=len(matrix[0])-1 top=0 bottom=len(matrix)-1 #在不超过边界的条件下,进行一轮循环 while (top<bottom and left<right): for i inrange(left,right): res.append(matrix[top][i]) for i inrange(top,bottom): res.append(matrix[i][right]) for i inrange(right,left,-1): res.append(matrix[bottom][i]) for i inrange(bottom,top,-1): res.append(matrix[i][left]) left+=1 top+=1 right-=1 bottom-=1 #如果剩余1行或1列:left=0 right1 if top==bottom: for i inrange(left,right+1): res.append(matrix[top][i]) elif left==right: for i inrange(top,bottom+1): res.append(matrix[i][left]) return res