LeetCode-64.最小路径和

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例:

输入:
[
  [1,3,1],
  [1,5,1],
  [4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。


  本题和 LeetCode-63.不同路径Ⅱ 类型一样,只需做少量更改即可

  采用动态规划建立dp[][]数组,代表在当前位置能有的路径条数

  1.建立与网格大小一样的数组dp

  2.遍历dp

    2.1作边界的处理: 最左上角的格为grid[0][0]的值,其余网格等于其上面或左边一格的dp数值 加上自身grid的值;

    2.2因为只能向下或向右移动一步,所以可以从网格的上面或左边进入网格,有两种方式,所以 取两种方式中的最小一种,并加上自身grid的值

 1 class Solution {
 2     public int minPathSum(int[][] grid) {
 3         //1.
 4         int i=grid.length;
 5         int j=grid[0].length;
 6         int [][]dp=new int[i][j];
 7         //2.
 8         for(int m=0;m<i;m++)
 9             for(int n=0;n<j;n++){
10                 //2.1
11                 if(m==0&&n==0)  dp[0][0]=grid[0][0];
12                 else if(m==0)   dp[0][n]=grid[0][n]+dp[0][n-1];
13                 else if(n==0)   dp[m][0]=grid[m][0]+dp[m-1][0];
14                 //2.2
15                 else    dp[m][n]=Math.min(dp[m-1][n],dp[m][n-1])+grid[m][n];
16             }
17         return dp[i-1][j-1];
18     }
19 }
原文地址:https://www.cnblogs.com/lyh28/p/10521156.html