
计数,计数够了停止
python
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
top = 0
bottom = len(matrix)-1
left = 0
right = len(matrix[0])-1
total = len(matrix) * len(matrix[0])
cnt = 0
res = []
while cnt < total:
# 当走到某条边的时候,可能已经遍历完了所有元素,break跳出剩下的 for 循环
for i in range(left,right+1): # 左闭右开,不+1遍历不到right
res.append(matrix[top][i])
cnt += 1
if cnt >= total: break
top +=1 # 更新上边界
for i in range(top, bottom+1):
res.append(matrix[i][right])
cnt += 1
if cnt >= total: break
right -=1 # 更新右边界
for i in range(right, left-1, -1): # 左闭右开,不-1遍历不到left
res.append(matrix[bottom][i])
cnt += 1
if cnt >= total: break
bottom -=1 # 更新下边界
for i in range(bottom, top-1,-1):
res.append(matrix[i][left])
cnt += 1
if cnt >= total: break
left +=1 # 更新左边界
return res