螺旋矩阵-python
·
题目:


思路:
- 若矩阵为空,返回空列表
- 初始化矩阵的左、上、右、下边界l,t,r,b,用于打印答案的列表res
- 循环打印:右、下、左、上
- 根据边界打印,将元素添加到res中
- 边界对应向里面缩一位,代表遍历过了
- 判断边界是否相碰,即判断是否打印完毕
- 返回res
| 遍历方向 | 遍历边界 | 边界内缩 | 打印是否结束 |
| 从左到右 | [l,r] | t+1 | if t>b |
| 从上到下 | [t,b] | r-1 | if l>r |
| 从右到左 | [l,r] | b-1 | if b<t |
| 从下到上 | [t,b] | l+1 | if l>r |

代码:
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
if not matrix:return []
l, t, r, b,res = 0, 0, len(matrix[0])-1,len(matrix)-1,[]
while True:
for i in range(l,r+1):
res.append(matrix[t][i])
t+=1
if t>b:break
for i in range(t,b+1):
res.append(matrix[i][r])
r-=1
if l>r:break
for i in range(r,l-1,-1):#l-1表示可以取到l
res.append(matrix[b][i])
b-=1
if t>b:break
for i in range(b,t-1,-1):#t-1表示可以取到t
res.append(matrix[i][l])
l+=1
if l>r:break
return res
更多推荐
所有评论(0)