目录

0498:对角线遍历(★)

力扣第 498 题

题目

给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。

示例 1:

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

示例 2:

输入:mat = [[1,2],[3,4]]
输出:[1,2,3,4]

提示:

  • m == mat.length
  • n == mat[i].length
  • 1 <= m, n <= 104
  • 1 <= m * n <= 104
  • -105 <= mat[i][j] <= 105

相似问题:

分析

  • 可以按对角线遍历,注意边界即可
  • 更简单的是直接遍历矩阵,将元素添加到对应对角线的列表中,最后再合并

解答

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Solution:
    def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]:
        m, n = len(mat), len(mat[0]) 
        A = [[] for _ in range(m+n-1)]
        for i,j in product(range(m), range(n)):
            A[i+j].append(mat[i][j])
        res = []
        for i, sub in enumerate(A):
            res.extend(sub if i%2 else sub[::-1])
        return res

49 ms