题目要求:思路:创建一个二维数组,存放每个格子中可以得到的礼物的最大值遍历数组,得到最大值当前礼物是礼物的最大值(最后一个单元格,或者左边的单元格)+当前礼物的值,并将这个值存储在一个二维数组中。最后返回二维数组的最后一个值,即最大值。核心代码:dp=[[0foriinrange(len(grid[0]))]forjinrange(len(grid))]foriinrange(len(grid)):forjinrange(len(grid[0])):#处理边界问题,如果当前礼物是第一个格子,那么它的最大值就是自己的最大值ifi==0andj==0:dp[i][j]=grid[0][0]#如果当前格子在第一行,而不是第一行第一个,也就是说它没有之前的格子,那么它的值就是自己加上上的格子itsleftelifi==0andj!=0:dp[i][j]=dp[i][j-1]+grid[i][j]#如果当前网格在第一列,并且它不是第一列的第一个,也就是说它左边没有格子,所以它的值是自己加上上面的格子elifj==0andi!=0:dp[i][j]=dp[i-1][j]+grid[i][j]否则:dp[i][j]=max(dp[i-1][j],dp[i][j-1])+grid[i][j]returndp[-1][-1]完整代码:class解决方案:defmaxValue(self,grid:List[List[int]])->int:dp=[[0foriinrange(len(grid[0]))]forjinrange(len(grid))]foriinrange(len(grid)):forjinrange(len(grid[0])):如果i==0andj==0:dp[i][j]=grid[0][0]elifi==0和j!=0:dp[i][j]=dp[i][j-1]+grid[i][j]elifj==0andi!=0:dp[i][j]=dp[i-1][j]+grid[i][j]否则:dp[i][j]=max(dp[i-1][j],dp[i][j-1])+grid[i][j]返回dp[-1][-1]
