51. 螺旋矩阵(Python)

作者: 玖月晴 | 来源:发表于2019-06-21 09:18 被阅读0次

更多精彩内容,请关注【力扣中等题】

题目

难度:★★★☆☆
类型:矩阵,二维数组
方法:寻找规律

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例

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

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

解答

为了螺旋遍历矩阵,我们需要解决几个关键问题:

  1. 如何确定直线的方向?以及如何换向?

  2. 如何确定直线移动的边界?

这两个问题我们这样解决,每次走一步,设置方向偏移量di,dj分别为0,1,初始情况下向右方开始遍历,将每次遍历后的位置置空,是否需要换向,可以通过判断前方是否为矩阵边界或空来实现。右转弯换向操作为:di, dj = dj, -di,然后继续遍历即可。

class Solution:
    def spiralOrder(self, matrix):
        """
        :param matrix: List[List[int]]
        :return: List[int]
        """

        res, i, j, di, dj = [], 0, 0, 0, 1
        if matrix:
            for _ in range(len(matrix) * len(matrix[0])):
                res.append(matrix[i][j])
                matrix[i][j] = None
                next_step = matrix[(i + di) % len(matrix)][(j + dj) % len(matrix[0])]
                if next_step is None:
                    di, dj = dj, -di
                i += di
                j += dj
        return res

如有疑问或建议,欢迎评论区留言~

相关文章

  • 51. 螺旋矩阵(Python)

    更多精彩内容,请关注【力扣中等题】。 题目 难度:★★★☆☆类型:矩阵,二维数组方法:寻找规律 给定一个包含 m ...

  • Python实现螺旋矩阵

    螺旋矩阵 什么是螺旋矩阵? 螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大...

  • (python实现)螺旋矩阵

    问题描述 给定一个大小的矩阵行,列),按螺旋的顺序返回矩阵中的所有元素。数据范围:,矩阵中任意元素都满足 示例1 ...

  • 885. 螺旋矩阵(Python)

    难度:★★★★☆类型:数组方法:数学 力扣链接请移步本题传送门[https://leetcode-cn.com/p...

  • 螺旋矩阵

    螺旋矩阵 1.想法: 对于矩阵的螺旋我们可以规约为4个方向 2.代码:

  • 螺旋矩阵

    递归 非递归

  • 螺旋矩阵

    给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例 1...

  • 螺旋矩阵

    题目描述:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。...

  • 螺旋矩阵

    给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例 1...

  • 螺旋矩阵

    原文地址,我的个人博 1.题目 2.分析 上图展示了一轮完整的顺时针螺旋遍历的过程,整个过程可以分为如图所示的四个...

网友评论

    本文标题:51. 螺旋矩阵(Python)

    本文链接:https://www.haomeiwen.com/subject/mqyeqctx.html