剑指 Offer 47. 礼物的最大价值

剑指 Offer 47. 礼物的最大价值

 

思路:贪心算法

  取移动每一步的最优解,即可得到答案。

  所有路径都会抵达棋盘的右下角,因此直接利用原棋盘数组记录每一格移动过去的礼物最大值,最终返回棋盘右下角元素即可。

代码:

时间复杂度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];                  //返回最后一格
    }
}
上一篇:行转列与列转行同时进行


下一篇:Linux之shell数组