面试题29. 顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

思路:

寻找边界条件

  1. 空值处理: 当 matrix 为空时,直接返回空列表 [] 即可。
  2. 初始化: 矩阵 左、右、上、下 四个边界 l , r , t , b ,用于打印的结果列表 res 。
  3. 循环打印: “从左向右、从上向下、从右向左、从下向上” 四个方向循环,每个方向打印中做以下三件事 (各方向的具体信息见下表)
    1. 根据边界打印,即将元素按顺序添加至列表 res 尾部;
    2. 边界向内收缩 1 (代表已被打印);
    3. 判断是否打印完毕(边界是否相遇),若打印完毕则跳出。
  4. 返回值res
    在这里插入图片描述
class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        if not matrix: return []
        l,r,t,b,res=0,len(matrix[0])-1,0,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): res.append(matrix[b][i])
            b-=1
            if t>b: break

            for i in range(b,t-1,-1): res.append(matrix[i][l])
            l+=1
            if l>r: break
        return res

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof

发布了88 篇原创文章 · 获赞 31 · 访问量 5064

猜你喜欢

转载自blog.csdn.net/weixin_43455338/article/details/104935787