498. 对角线遍历

exiaohu 于 2022-06-14 发布

题目链接:498. 对角线遍历

直接模拟。

class Solution:
    def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]:
        ret = []
        m, n = len(mat), len(mat[0])
        for k in range(m + n - 1):
            if k % 2:
                i, j = max(0, k - n + 1), min(k, n - 1)
                while i < m and j >= 0:
                    ret.append(mat[i][j])
                    i += 1
                    j -= 1
            else:
                i, j = min(k, m - 1), max(0, k - m + 1)
                while i >= 0 and j < n:
                    ret.append(mat[i][j])
                    i -= 1
                    j += 1
        return ret