剑指 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%的用户
文章目录
关闭
共有 0 条评论