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
有哪位大佬可以告訴我,爲何同樣一段代碼,在力扣上時間運行會不一樣啊