Leetcode 64. 最小路径和

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

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

示例:

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


思路:简单DP
dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j];
当前值=左边与上边较小的值加上当前网格的值
对于边界直接做前缀和

 1 int minPathSum(int[][] grid) {
 2         int r=grid.length;
 3         int c=-1;
 4         if(r!=0)
 5             c=grid[0].length;
 6         
 7         int [][] dp=new int[r][c];
 8         
 9         for(int i=0;i<r;i++)
10         {
11             for(int j=0;j<c;j++)
12             {
13                 if(i==0&&j==0)
14                     dp[i][j]=grid[0][0];
15                 else if(i==0)
16                 {
17                     dp[i][j]=dp[i][j-1]+grid[i][j];
18                 }else if(j==0)
19                 {
20                     dp[i][j]=dp[i-1][j]+grid[i][j];
21                 } else {
22                     dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j];
23                 }
24             }
25         }
26         return dp[r-1][c-1];
27         
28     }
29     private int min(int i, int j) {
30         // TODO Auto-generated method stub
31         if(i<j)
32             return i;
33         else return j;
34     }
View Code

 

posted @ 2018-11-15 22:46  阿十三  阅读(119)  评论(0)    收藏  举报