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 }