leetcode【中等】54、螺旋矩阵

在这里插入图片描述
思路:

  1. 定义表示四条边的变量l,r,t,b表示左右上下
  2. 按照顺序遍历上右下左四条边,每遍历一条边该范围缩小1,比如上边遍历完,则t减一。定义一个计数变量num,当num等于所有元素数量之和则跳出循环
  3. 注意有可能在循环结束前已经超过了范围,所以在遍历四条边时候,也要加上条件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

猜你喜欢

转载自blog.csdn.net/qq_40707462/article/details/112830666