题目描述
解题思路
其实想明白这个题目也挺简单的,无非就是到转弯处改变方向,但是一开始看到这个题目的时候,确实没想到该怎么去解决。首先确定四个方向,在这之前,设置转换方向的节点,转换方向的条件是,行或者列超出了范围以及该节点没有被访问过。
解题代码
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
if not matrix or not matrix[0]:
return list()
rows,columns=len(matrix),len(matrix[0])
visited=[[False]*columns for _ in range(rows)]
total=rows*columns
order=[0]*total
directions=[[0,1],[1,0],[0,-1],[-1,0]]
row,column=0,0
directionIndex=0
for i in range(total):
order[i]=matrix[row][column]
visited[row][column]=True
nextRow,nextColumn=row+directions[directionIndex][0],column+directions[directionIndex][1]
if not (0<=nextRow<rows and 0<=nextColumn<columns and not visited[nextRow][nextColumn]):
directionIndex=(directionIndex+1)%4
row+=directions[directionIndex][0]
column+=directions[directionIndex][1]
return order