minimum-path-sum
阿新 • • 發佈:2020-07-24
題目描述
給定一個由非負整數填充的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 intm=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 }