minimum-path-sum
题目描述
给定一个由非负整数填充的m x n的二维数组,现在要从二维数组的左上角走到右下角,请找出路径上的所有数字之和最小的路径。
注意:你每次只能向下或向右移动。
注意:你每次只能向下或向右移动。
二维数组动态规划求解:
1 import java.util.*; 2 3 4 public class Solution { 5 /** 6 * 7 * @param grid int整型二维数组 8 * @return int整型 9 */ 10 public int minPathSum (int[][] grid) { 11 int m=grid.length; 12 int n=grid[0].length; 13 int[][] dp=new int[m][n]; 14 int sum=0; 15 for(int i=0;i<m;i++){ 16 sum+=grid[i][0]; 17 dp[i][0]=sum; 18 } 19 sum=0; 20 for(int i=0;i<n;i++){ 21 sum+=grid[0][i]; 22 dp[0][i]=sum; 23 } 24 for(int i=1;i<m;i++){ 25 for(int j=1;j<n;j++){ 26 dp[i][j]=grid[i][j]+Math.min(dp[i-1][j],dp[i][j-1]); 27 } 28 } 29 return dp[m-1][n-1]; 30 } 31 }
一维数组动态规划:
1 import java.util.*; 2 3 4 public class Solution { 5 /** 6 * 7 * @param grid int整型二维数组 8 * @return int整型 9 */ 10 public int minPathSum (int[][] grid) { 11 int m=grid.length; 12 int n=grid[0].length; 13 int[] dp=new int[n+1]; 14 int sum=0; 15 for(int i=0;i<n;i++){ 16 sum+=grid[0][i]; 17 dp[i]=sum; 18 } 19 for(int i=1;i<m;i++){ 20 dp[0]=dp[0]+grid[i][0]; 21 for(int j=1;j<n;j++){ 22 dp[j]=Math.min(dp[j]+grid[i][j],dp[j-1]+grid[i][j]); 23 } 24 } 25 return dp[n-1]; 26 } 27 }