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 }

 



posted @ 2020-07-24 17:03  打屎也不熬夜  阅读(97)  评论(0编辑  收藏  举报