数据研发笔试Leetcode刷题笔记27:顺时针打印矩阵

文章目录

  • 1 题目描述
  • 2 解题思路
  • 3 代码实现(Python3)
  • 4 复杂度分析

1 题目描述

来源:力扣(LeetCode)

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

数据研发笔试Leetcode刷题笔记27:顺时针打印矩阵_第1张图片

2 解题思路

根据题目示例 matrix = [[1,2,3],[4,5,6],[7,8,9]] 的对应输出 [1,2,3,6,9,8,7,4,5] 可以发现,顺时针打印矩阵的顺序是 “从左向右、从上向下、从右向左、从下向上” 循环。

因此,考虑设定矩阵的“左、上、右、下”四个边界,模拟以上矩阵遍历顺序1
数据研发笔试Leetcode刷题笔记27:顺时针打印矩阵_第2张图片
数据研发笔试Leetcode刷题笔记27:顺时针打印矩阵_第3张图片

3 代码实现(Python3)

class Solution:
    def spiralOrder(self, matrix:[[int]]) -> [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]) # left to right
            t += 1
            if t > b: break
            for i in range(t, b + 1): res.append(matrix[i][r]) # top to bottom
            r -= 1
            if l > r: break
            for i in range(r, l - 1, -1): res.append(matrix[b][i]) # right to left
            b -= 1
            if t > b: break
            for i in range(b, t - 1, -1): res.append(matrix[i][l]) # bottom to top
            l += 1
            if l > r: break
        return res

4 复杂度分析

  • 时间复杂度 O(MN) : M,N 分别为矩阵行数和列数。
  • 空间复杂度 O(1) : 四个边界 l , r , t , b 使用常数大小的 额外 空间( res 为必须使用的空间)。

深入了解复杂度:数据分析学习总结笔记11:空间复杂度和时间复杂度


  1. 解题思路_作者:jyd ↩︎

你可能感兴趣的:(数据研发笔试Leetcode刷题笔记27:顺时针打印矩阵)