47.禮物的最大價值
面試題47. 禮物的最大價值
難度中等34
在一個 m*n 的棋盤的每一格都放有一個禮物,每個禮物都有一定的價值(價值大於
0)。你可以從棋盤的左上角開始拿格子裏的禮物,並每次向右或者向下移動一格、直到到達棋盤的右下角。給定一個棋盤及其上面的禮物的價值,請計算你最多能拿到多少價值的禮物?示例 1:
輸入: [ [1,3,1], [1,5,1], [4,2,1] ] 輸出: 12 解釋: 路徑 1→3→5→2→1 可以拿到最多價值的禮物
//採用dp 如果是遞歸的話 會出現很多重複性計算,複雜度比較高
//而dp每次選取最優的解,time : O(n*m)
public int maxValue(int[][] grid) {
if(grid.length == 0 || grid == null || grid[0].length == 0){
return 0;
}
int n = grid[0].length;
int [] dp = new int [n];
for(int [] g : grid){
dp[0]+=g[0];
for(int i=1;i<n;i++){
dp[i] = Math.max(dp[i],dp[i-1])+g[i];
}
}
return dp[n-1];
}