感觉这种题用自动机很方便啊
class Solution(object):
def spiralOrder(self, matrix):
ans=[]
m=len(matrix)
n=len(matrix[0])
dict={'up':[-1,0,'right'],
'down':[+1,0,'left'],
'left':[0,-1,'up'],
'right':[0,+1,'down']}
matrix_sign=[[False]*n for i in range(m)]
state='right'
i=j=0
while len(ans)<m*n:
matrix_sign[i][j] = True
ans.append(matrix[i][j])
i+=dict[state][0]
j+=dict[state][1]
if i==m or j==n or matrix_sign[i][j]:
i-=dict[state][0]
j-=dict[state][1]
state=dict[state][2]
i+=dict[state][0]
j+=dict[state][1]
return ans