题解 | #礼物的最大价值#
礼物的最大价值
http://www.nowcoder.com/practice/2237b401eb9347d282310fc1c3adb134
```/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @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
};