剑指 Offer 29. 顺时针打印矩阵

题目描述

https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

示例 1:

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

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

限制:

0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
注意:本题与主站 54 题相同:https://leetcode-cn.com/problems/spiral-matrix/

解题思路


需要注意的是每一个for后面都需要带一个break语句,否则在全打印完以后会出现上界突出过了下界的情况,接下来就会因为产生了新的不该打印的数,产生死循环。

解题代码

class Solution:
    def spiralOrder(self, matrix: list[list[int]]) -> list[int]:
        if matrix == []:
            return []
        result = []
        # 定义左/右/上/下边界
        l, r, t, b = 0, len(matrix[0]) - 1, 0, len(matrix) - 1
        while True:
            for i in range(l, r + 1, 1):
                result.append(matrix[t][i])
            t += 1
            if t > b: break
            for i in range(t, b + 1, 1):
                result.append(matrix[i][r])
            r -= 1
            if l > r: break
            for i in range(r, l - 1, -1):
                result.append(matrix[b][i])
            b -= 1
            if t > b: break
            for i in range(b, t - 1, -1):
                result.append(matrix[i][l])
            l += 1
            if l > r: break
        return result

执行结果

执行结果:通过
执行用时:40 ms, 在所有 Python3 提交中击败了92.53%的用户
内存消耗:15.1 MB, 在所有 Python3 提交中击败了92.34%的用户

版权声明:
作者:iLemonRain
链接:http://314401480.xyz/?p=276
来源:柠檬酱的blog
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录