题目:

思路:

  1. 若矩阵为空,返回空列表
  2. 初始化矩阵的左、上、右、下边界l,t,r,b,用于打印答案的列表res
  3. 循环打印:右、下、左、上
    1. 根据边界打印,将元素添加到res中
    2. 边界对应向里面缩一位,代表遍历过了
    3. 判断边界是否相碰,即判断是否打印完毕
  4. 返回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

        

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐