题解 | #矩阵最长递增路径#

矩阵最长递增路径

https://www.nowcoder.com/practice/7a71a88cdf294ce6bdf54c899be967a2

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 递增路径的最大长度
 * @param matrix int整型二维数组 描述矩阵的每个数
 * @return int整型
 */

// 向四个方向分别探索,深度优先算法

function dfs(matrix, i, j) {
    let x = matrix.length;
    let y = matrix[0].length;
    let cur = matrix[i][j];
    // let res = [];
    let max = 1;
    if (i - 1 >= 0) {
        let left = matrix[i - 1][j];
        if (cur < left) {
            left = dfs(matrix, i - 1, j) + 1;
            if (Number.isNaN(left)) {
                console.log(i, j);
            }
            max = Math.max(max,  left);
        }
    }
    if (i + 1 <= x - 1) {
        let right = matrix[i + 1][j];
        if (cur < right) {
            right = dfs(matrix, i + 1, j) + 1;
            if (Number.isNaN(right)) {
                console.log(i, j);
            }
            max = Math.max(max,  right);
        }
    }
    if (j - 1 >= 0) {
        let up = matrix[i][j - 1];
        if (cur < up) {
            up = dfs(matrix, i, j - 1) + 1;
            if (Number.isNaN(up)) {
                console.log(i, j);
            }
            max = Math.max(max,  up);
        }
    }
    if (j + 1 <= y - 1) {
        let down = matrix[i][j + 1];
        if (cur < down) {
            down = dfs(matrix, i, j + 1) + 1;
            if (Number.isNaN(down)) {
                console.log(i, j);
            }
            max = Math.max(max,  down);
        }
    }

    return max;
}

function solve(matrix) {
    // write code here
    let x = matrix.length;
    let y = matrix[0].length;
    // 对每一个节点进行深度优先计算,求出在该节点下的最长距离push进res数组中
    let res = [];
    for (let i = 0; i < x; i++) {
        for (let j = 0; j < y; j++) {
            res.push(dfs(matrix, i, j));
        }
    }
    return Math.max(...res);
}
module.exports = {
    solve: solve,
};

全部评论

相关推荐

cpp苦手:一眼ddl
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务