题目
难度
力扣难度中等,实际难度简单
分类
动态规划
思路
走格子挺经典的,从左上走到右下,大概能猜到是动态规划,建一个跟入参一样大的表格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];
}
}