【题解】剑指 Offer II 099. 最小路径之和

101 阅读1分钟

题目

1662998431(1).png

难度

力扣难度中等,实际难度简单

分类

动态规划

思路

走格子挺经典的,从左上走到右下,大概能猜到是动态规划,建一个跟入参一样大的表格minMap用来存放走到这个格子时的最小路径之和。因为目的地是右下嘛,所以每一个格子中的最小路径要么是从上面一个格子走下来的,要么是从左边格子走过去的,因为从下面往上走和从右边往左走都是没有意义的,走到了还是要走回去的。实际要走的路径都是长 + 宽 -1,那么第一个格子minMap值一定是自身 入参map值,第一排一定是左边格子的minMap值 + 入参map值,因为这一排路径最小值一定是从左边格子走过来的,同理第一列一定是从上面格子走下来的,然后其他格子的最小路径取上或左格子中 minMap值比较小的那个加上当前 入参map值,就这样一路遍历下去,遍历完了返回minMap[h-1][w-1]就好了

代码

class Solution {
    public int minPathSum(int[][] grid) {
        Integer h = grid.length;
        Integer w = grid[0].length;
        Integer [][] minMap = new Integer[h][w];
        for (int i = 0 ; i < h ;i ++) {
            for (int j = 0 ;j<w;j++){
                if (i == 0 && j ==0) {
                    minMap[i][j] = grid[i][j];
                    continue;
                }
                if (i == 0) {
                    minMap[i][j] = minMap[i][j-1] + grid[i][j];
                    continue;
                }
                if (j == 0) {
                    minMap[i][j] = minMap[i-1][j] + grid[i][j];
                    continue;
                }
                if (minMap[i-1][j] < minMap[i][j-1]) {
                    minMap[i][j] = minMap[i-1][j] + grid[i][j];
                } else {
                    minMap[i][j] = minMap[i][j-1] + grid[i][j];
                }
            }
        }
        return minMap[h-1][w-1];
    }
}