JZ47 禮物的最大價值 描述 描述 在一個m\times nm×n的棋盤的每一格都放有一個禮物,每個禮物都有一定的價值(價值大於 0)。你可以從棋盤的左上角開始拿格子里的禮物,並每次向右或者向下移動一格、直到到達棋盤的右下角。給定一個棋盤及其上面的禮物的價值,請計算你最多能拿到多少價值的禮物? 如 ...
JZ47 禮物的最大價值
描述
描述
在一個m\times nm×n的棋盤的每一格都放有一個禮物,每個禮物都有一定的價值(價值大於 0)。你可以從棋盤的左上角開始拿格子里的禮物,並每次向右或者向下移動一格、直到到達棋盤的右下角。給定一個棋盤及其上面的禮物的價值,請計算你最多能拿到多少價值的禮物?
如輸入這樣的一個二維數組,
[
[1,3,1],
[1,5,1],
[4,2,1]
]
那麼路徑 1→3→5→2→1 可以拿到最多價值的禮物,價值為12
具體做法:
step 1:初始化第一列,每個元素只能累加自上方。
step 2:初始化第一行,每個元素只能累加自左方。
step 3:然後遍曆數組,對於每個元素添加來自上方或者左方的較大值。
代碼
package mid.JZ47禮物的最大價值;
import java.util.*;
public class Solution {
/**
* 代碼中的類名、方法名、參數名已經指定,請勿修改,直接返回方法規定的值即可
*
*
* @param grid int整型二維數組
* @return int整型
*/
public int maxValue (int[][] grid) {
// write code here
int x = grid[0].length;
int y = grid.length;
//初始化第一列
for (int i = 1; i < y; i++) {
grid[i][0] += grid[i - 1][0];
}
//初始化第一行
for (int i = 1; i < x; i++) {
grid[0][i] += grid[0][i - 1];
}
for (int i = 1; i < y; i++) {
for (int j = 1; j < x; j++) {
grid[i][j] += Math.max(grid[i-1][j], grid[i][j-1]);
}
}
return grid[y-1][x-1];
}
public static void main(String[] args) {
int[][] ints = {{9, 1, 4, 8}};
System.out.println(new Solution().maxValue(ints));
}
}