算法列表

498.对角线遍历 中等

布莱克2026-04-23 18:58矩阵

问题:

给你一个大小为 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 + n - 1条,从0开始遍历,并且每条对角线的横左边加纵坐标的和为当前遍历的值k

k为偶数时,代表从左下忘右上遍历,当k为奇数时,代表从右上往左下遍历

function findDiagonalOrder(mat) {
    let m = mat.length;
    let n = mat[0].length;
    let res = [];
    for (let k = 0; k < m + n - 1; k++) {
        //右上方
        if (k % 2 == 0) {
            let row = Math.min(k, m - 1);
            let col = k - row;
            while (row >= 0 && col < n) {
                res.push(mat[row][col]);
                row--;
                col++;
            }
            
        } else {
            let col = Math.min(k, n - 1);
            let row = k - col;
            while (row < m && col >= 0) {
                res.push(mat[row][col]);
                row++;
                col--;
            }
        }
    }
    return res;
}


assistant