题目描述:
解法1:
这是一道经典的动态规划题目。这道题没有要求不能在原来的数组上修改,所以我们可以定义一个新数组或者在原来的数组上修改。但是一般的话,我们都是创建一个和原来数组大小一样的新数组来存放结果。
首先,我们定义一个新数组。然后使用动态规划的思想,除去第一列和第一行,其他位置都有两种方法可以到达。一种是纵向,一种是横向,我们只要取其中价值最大的一种即可。对于第一列的元素,相互之间只能是横向到达。而第一行的元素,相互之间只能是纵向到达。最终,我们返回终点的元素就是这个二维数组的最大价值了。
class Solution {
public int maxValue(int[][] grid) {
int cols = grid[0].length;
int rows = grid.length;
int[][] dp = new int[rows][cols];
dp[0][0] = grid[0][0];
for(int i = 0; i < rows; i++){