美文网首页
498. 按对角线遍历(Python)

498. 按对角线遍历(Python)

作者: 玖月晴 | 来源:发表于2020-10-27 21:06 被阅读0次

    题目

    难度:★★★☆☆
    类型:数组
    方法:理清思路

    力扣链接请移步本题传送门
    更多力扣中等题的解决方案请移步力扣中等题目录

    给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。

    示例:

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

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

    说明:

    给定矩阵中的元素总数不会超过 100000 。

    解答

    问题分解是重要的。首先不用考虑来来回回的遍历方向,因为这是有规律可循的。我们可以首先把这一个个切片找出来,然后通过奇偶的特定组合,将各个切片重排序,重新组成列表即可。

    class Solution:
        def findDiagonalOrder(self, matrix):
            if not matrix:
                return []
            rows, columns = len(matrix), len(matrix[0])
            
            def get_piece(r, c):
                res = []
                while 0 <= r < rows and 0 <= c <= columns:
                    res.append(matrix[r][c])
                    r += 1
                    c -= 1
                return res
    
            start_points = [[0, j] for j in range(columns)] + [[i, columns-1] for i in range(1, rows)]
    
            res = []
            for i, (r, c) in enumerate(start_points):
                lst = get_piece(r, c)
                if i % 2 == 0:
                    lst = reversed(lst)
                res += lst
            return res
    

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

    有关更多力扣中等题的python解决方案,请移步力扣中等题解析

    相关文章

      网友评论

          本文标题:498. 按对角线遍历(Python)

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