LeetCode 498. 对角线遍历 (找规律)

题目

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

示例:

输入:

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

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

解释:


说明:

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

解题思路

对于m*n矩阵,所有方向应该有m+n-1次

当 m=3, n=3 
(0, 0)  m+n=0  正序

(0, 1)  m+n=1  倒叙
(1, 0)

(2, 0)  m+n=2  正序
(1, 1)
(0, 2)

(1, 2)  m+n=3  倒叙
(2, 1)

(2, 2)  m+n=4  正序

最后,以1作为开始的话,如果为奇数,后续获得的值 x 和 y的值反着拿,那么最大值也要反一下。

代码

/**
 * @param {number[][]} matrix
 * @return {number[]}
 */
var findDiagonalOrder = (matrix) => {
    if (matrix.length === 0) return []
    let xlen = matrix.length
    let ylen = matrix[0].length
    let cnt = xlen + ylen - 1
    let res = []
    for (let i = 1; i <= cnt; i++) {
        let xMax = i % 2 === 0 ? xlen : ylen
        let yMax = i % 2 === 0 ? ylen : xlen
        for (let x = 0; x < i; x++) {
            let y = i - x - 1
            if (x >= xMax || y >= yMax) continue
            res.push(i % 2 === 0 ? matrix[x][y] : matrix[y][x])
        }
    }
    return res
};

猜你喜欢

转载自blog.csdn.net/weixin_42429718/article/details/108181796