思路:
- 定义表示四条边的变量l,r,t,b表示左右上下
- 按照顺序遍历上右下左四条边,每遍历一条边该范围缩小1,比如上边遍历完,则t减一。定义一个计数变量num,当num等于所有元素数量之和则跳出循环
- 注意有可能在循环结束前已经超过了范围,所以在遍历四条边时候,也要加上条件num <= total
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
l=0
r=len(matrix[0])-1
t=0
b=len(matrix)-1
total=len(matrix)*len(matrix[0])
num=1
res=[]
while num<=total:
for i in range(l,r+1) :
if num<=total:
res.append(matrix[t][i])
num+=1
t+=1
for i in range(t,b+1):
if num <= total:
res.append(matrix[i][r])
num+=1
r-=1
for i in range(r,l-1,-1) :
if num <= total:
res.append(matrix[b][i])
num+=1
b-=1
for i in range(b,t-1,-1):
if num <= total:
res.append(matrix[i][l])
num+=1
l+=1
return res