class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
if not matrix:
return []
result = []
from collections import deque
vector = deque([[0, 1], [1, 0], [0, -1], [-1, 0]]) #使用了循环队列不停换方向走
Pos = [0, 0]
result.append(matrix[Pos[0]][Pos[1]])
matrix[Pos[0]][Pos[1]] = None
v = vector.popleft()
vector.append(v)
while(not self.End(matrix, Pos)): #不撞墙(None)就一直走,撞墙换方向直到最后一个元素
Pos = [Pos[0] + v[0], Pos[1] + v[1]]
try:
if matrix[Pos[0]][Pos[1]] == None:
raise IndexError
result.append(matrix[Pos[0]][Pos[1]])
matrix[Pos[0]][Pos[1]] = None
except IndexError:
Pos = [Pos[0] - v[0], Pos[1] - v[1]]
v = vector.popleft()
vector.append(v)
return result
def End(self, matrix, pos): #是否是最后一个位置
try:
if matrix[pos[0] + 1][pos[1]] is not None:
return False
except IndexError:
pass
try:
if matrix[pos[0] - 1][pos[1]] is not None:
return False
except IndexError:
pass
try:
if matrix[pos[0]][pos[1] + 1] is not None:
return False
except IndexError:
pass
try:
if matrix[pos[0]][pos[1] - 1] is not None:
return False
except IndexError:
pass
return True
有哪位大佬可以告诉我,为何同样一段代码,在力扣上时间运行会不一样啊