498. 按对角线遍历(Python)

题目

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

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

给定一个含有 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))