实现思路:
- 先把第一列向下加,第一行向右加
- 再从第二行第二个元素,开始往后加(加的值是左边和上边的最大值)
- 那么第m行第n列的元素就是最大值
如下图的矩阵变化:
代码实现:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param grid int整型二维数组
* @return int整型
*/
public int maxValue (int[][] grid) {
int m = grid.length;
int n = grid[0].length;
//第一列往右加
for(int i=0; i<n-1; i++){
grid[0][i+1] += grid[0][i];
}
//第一列往下加
for(int i=0; i<m-1; i++){
grid[i+1][0] += grid[i][0];
}
//后边的都比较一下,上和左的大小
for(int i=1; i<m; i++){
for(int j=1; j<n; j++){
grid[i][j] += Math.max(grid[i-1][j],grid[i][j-1]);
}
}
return grid[m-1][n-1];
}
}