思路:贪心算法
取移动每一步的最优解,即可得到答案。
所有路径都会抵达棋盘的右下角,因此直接利用原棋盘数组记录每一格移动过去的礼物最大值,最终返回棋盘右下角元素即可。
代码:
时间复杂度O(MN),空间复杂度O(1)
class Solution { public int maxValue(int[][] grid) { int m = grid.length, n = grid[0].length; for(int i = 0; i < m; i++) { //行 for(int j = 0; j < n; j++) { //列 if(i == 0 && j == 0) //跳过第一格 continue; if(i == 0) grid[i][j] += grid[i][j - 1]; //i=0意味在向右移 else if(j == 0) grid[i][j] += grid[i - 1][j]; //在向下移 else grid[i][j] += Math.max(grid[i][j - 1], grid[i - 1][j]); //向右或下方向价值最大的方向移动,即贪心 } } return grid[m - 1][n - 1]; //返回最后一格 } }