题解 | #礼物的最大价值#

礼物的最大价值

http://www.nowcoder.com/practice/2237b401eb9347d282310fc1c3adb134

// /**
//  * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
//  *
//  * 
//  * @param grid int整型二维数组 
//  * @return int整型
//  */
// function maxValue( grid ) {
//     // write code here
//     let m=grid.length
//     let n=grid[0].length
//     let dp = []
//     for (let i = 0; i < m ;i++) {
//         dp[i] = []
//         for (let j = 0;j < n;j++) {
//             dp[i][j] = 0
//         }
//     }
//     let gift=0
//     dp[0][0]=grid[0][0]
//     for(let i=1;i<n;i++){
//         dp[0][i]+=grid[0][i]
//     }
//     for(let j=1;j<m;j++){
//         dp[j][0]+=grid[j][0]
//     }
//     for(let i=1;i<m;m++){
//         for(let j=1;j<n;n++){
//             dp[i][j]=grid[i][j]+Math.max(dp[i-1][j],dp[i][j-1])
//         }
//     }
//     return dp[m-1][n-1]
// } 
// module.exports = {
//     maxValue : maxValue
// };

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param grid int整型二维数组 
 * @return int整型
 */

function maxValue( grid ) {
    // write code here
    // 递归:对于某一个坐标的路线最大值,就是这个坐标值加他的上面或者左边坐标的最大值(取大)。
    // 首先构造一个和grid矩阵维度一致的矩阵
    let dp = [];
    let rowNum = grid.length;
    let cowNum = grid[0].length;
    for (let i = 0; i < rowNum;i++) {
        dp[i] = []
        for (let j = 0;j < cowNum;j++) {
            dp[i][j] = 0
        }
    }
    //此时dp每个位置已填了0,下面给dp的第一行和第一列填充路径最大值
    //左上角
    dp[0][0] = grid[0][0]
    //第一列
    for(let i = 1;i<rowNum;i++){
        dp[i][0]=grid[i][0]+dp[i-1][0] //递归本质一种思想,实现的像是不一定是函数,变量的赋值也可以递归
    }
    //第一行
    for(let j = 1;j<cowNum;j++){
        dp[0][j]=grid[0][j]+dp[0][j-1]
    }
    //递归其他的路径最大值,这里递归的终点就是i=0或者j=0,即上面已经给dp赋过的值
    for(let i = 1;i<rowNum;i++){
        for(let j=1;j<cowNum;j++){
            dp[i][j]= Math.max(grid[i][j]+dp[i-1][j],grid[i][j]+dp[i][j-1])
        }
    }
    return dp[rowNum-1][cowNum-1] //返回dp右下角的值即为最大路径值
}
    
module.exports = {
    maxValue : maxValue
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务