classSolution{ publicintmaxValue(int[][] grid){ int m = grid.length; int n = grid[0].length;
//第一行,只能从左到右,所有后面的等于前面的相加 for (int i = 1; i < n; i++) { grid[0][i] += grid[0][i -1]; } //第一列,只能是从上到下 for (int i = 1; i < m; i++) { grid[i][0] += grid[i - 1][0]; }
//当前 i,j 只能是从上面来,或者从前面来 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]; }