题目地址: https://leetcode-cn.com/problems/minimum-path-sum/submissions/
经典DP的题目
-
当左边和上边都不是矩阵边界时: 即当i != 0, j != 0
grid[i][j] = Math.min(grid[i - 1][j] + grid[i][j], grid[i][j - 1] + grid[i][j]); -
当只有左边是矩阵边界时: 只能从上面来,即当i = 0, j != 0
dp[i][j] = dp[i][j - 1] + grid[i][j]; -
当只有上边是矩阵边界时: 只能从左面来,即当i != 0, j = 0
dp[i][j] = dp[i - 1][j] + grid[i][j]; -
当左边和上边都是矩阵边界时: 即当i = 0, j = 0.就是起点
class Solution {
public int minPathSum(int[][] grid) {
//左上角 -> 右下角
//路径数字总和最小
//向下或向右移动一步
int row, column;
row = grid.length;
column = grid[0].length;
//直接dp处理,1 4 5
// 2 7 6
// 6 7 7
//每个位置与 上 右 的值相加取出最小值,以局部满足 -> 全局的满足
for(int i = 0; i < row; i++){
for(int j = 0; j < column; j++){
//i,j == 0
if(i == 0 && j == 0) continue;
//i == 0
else if(i == 0) grid[i][j] = grid[i][j] + grid[i][j - 1];
//j == 0
else if(j == 0) grid[i][j] = grid[i - 1][j] + grid[i][j];
//取最小值
else grid[i][j] = Math.min(grid[i - 1][j] + grid[i][j], grid[i][j - 1] + grid[i][j]);
}
}
return grid[row - 1][column - 1];
}
}