image.png

思路 二维动态规划

image.png

  1. public int minPathSum(int[][] grid) {
  2. int r = grid.length;
  3. int c = grid[0].length;
  4. int[][] dp = new int[r][c];
  5. //从最后一行开始计算
  6. for(int i=r-1;i>=0;i--){
  7. //从最后一列向前计算
  8. for(int j=c-1;j>=0;j--){
  9. if(i==r-1&&j==c-1) //如果是右下角的元素 则直接赋值
  10. dp[i][j]=grid[i][j];
  11. else if(i==r-1) //如果是最后一行
  12. dp[i][j]=grid[i][j]+dp[i][j+1];
  13. else if(j==c-1) //如果是最后一列
  14. dp[i][j]=grid[i][j]+dp[i+1][j];
  15. //如果是普通的情况
  16. else dp[i][j] = grid[i][j]+Math.min(dp[i][j+1],dp[i+1][j]);
  17. }
  18. }
  19. return dp[0][0];
  20. }