• $dp[i][j]=grid[i][j]+min(dp[i−1][j], dp[i][j−1])$

  • 2.19

    • 初始化dp【i,0】【j,0】
  • 2.4

    • 也要初始化第一行第一列,只不过需要计入步数的逻辑
  • ??。? 但是注意——这个公式 不能直接用于最上面那一行和最左边那一列,因为:

    • 最上面那一行的格子 没有上方格子
    • 最左边那一列的格子 没有左边格子
class Solution {
    public int minPathSum(int[][] grid) {
        int m = grid.length;
        int n = grid[0].length;
        int[][] dp = new int[m][n]; 
        dp[0][0] = grid[0][0];
        //初始化第一行和第一列(也是走的状态公式)(不初始化时会像第一题一样越界)
        for(int j=1;j<n;j++){
            dp[0][j] = grid[0][j]+dp[0][j-1];
        }
        for(int i=1;i<m;i++){
            dp[i][0] = grid[i][0]+dp[i-1][0];
        }
        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                dp[i][j] =grid[i][j] + Math.min(dp[i-1][j],dp[i][j-1]);
            }
        }
        return dp[m-1][n-1];
    }
}