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


图片转自 https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/5vr32s/
遍历
执行用时:3 ms, 在所有 Java 提交中击败了77.52% 的用户 内存消耗:40.5 MB, 在所有 Java 提交中击败了99.04% 的用户
public class Solution {// 从地图的左上角开始往右或往下走// 使用 grid[i][j] 记录最大值// 当 i == 0 & j == 0 时,grid[i][j] 等于本身// 当 i == 0 & j != 0 时,grid[i][j] 只能等于上方块加自身// 当 i != 0 & j == 0 时,grid[i][j] 只能等于左方块加自身// 当 i != 0 & j != 0 时,grid[i][j] 等于左方块和上方块中较大值加自身public int maxValue(int[][] grid) {// 从上往下for (int i = 0; i < grid.length; i++)// 从左往右for (int j = 0; j < grid[0].length; j++)// 如果是 {0, 0}if (i == 0 && j == 0) continue;// 如果 i == 0 & j != 0 上方块加自身else if (i == 0) grid[i][j] += grid[i][j - 1];// 如果 i != 0 & j == 0 左方块加自身else if (j == 0) grid[i][j] += grid[i - 1][j];// 如果 i != 0 & j != 0 取左方块和上方块的较大值加自身else grid[i][j] += Math.max(grid[i - 1][j], grid[i][j - 1]);// 返回地图的右下角return grid[grid.length - 1][grid[0].length - 1];}}
遍历,if 块的另外一种写法
执行用时:3 ms, 在所有 Java 提交中击败了77.52% 的用户 内存消耗:41 MB, 在所有 Java 提交中击败了68.73% 的用户
class Solution {public int maxValue(int[][] grid) {int totalRow = grid.length;int totalCol = grid[0].length;for (int i = 0; i < totalRow; i++) {for (int j = 0; j < totalCol; j++) {int curValue = grid[i][j];if (i > 0 && j > 0) {grid[i][j] = Math.max(grid[i - 1][j], grid[i][j - 1]) + curValue;} else if (i > 0) {grid[i][j] = curValue + grid[i - 1][j];} else if (j > 0) {grid[i][j] = curValue + grid[i][j - 1];}}}return grid[totalRow - 1][totalCol - 1];}}
