题目要求:(剑指 Offer 47. 礼物的最大价值)
本题与剑指 Offer 63. 股票的最大利润和剑指 Offer 42. 连续子数组的最大和相类似,区别在于本题是二维数据,而42和63题是一维数据。
解题方法:动态规划
解题思路:计算出每一步的最大值,而每一步的最大值=上一步的最大值+当前步
代码如下:
var maxValue = function(grid) {
//边界条件
if(grid.length==0){
return 0
}
let row=grid.length
let col=grid[0].length
//将两个边界判断拿出来
for(let i=1;i<col;i++){
grid[0][i]=grid[0][i]+grid[0][i-1]
}
for(let j=1;j<col;j++){
grid[j][0]=grid[j][0]+grid[j-1][0]
}
for(let i=0;i<row;i++){
for(let j=0;j<col;j++){
if(i==0||j==0){
continue
}
grid[i][j]=grid[i][j]+Math.max(grid[i-1][j],grid[i][j-1])
}
}
return grid[row-1][col-1]
}
解题总结:此题用dfs会出现错误,最好最简单还是用动态规划来解决,计算走到每一步做能达到的最大价值。