Leetcode 64.最小路径和

Leetcode 64.最小路径和

问题描述

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

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

示例:

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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-path-sum

思路

动态规划

和62、63题思路类似。只要稍加改变数路径的函数。dp[i]表示当前位置到终点的最路径和

dp[i]=当前数字grid[i][j]+min(右侧和下侧最短路径和)

初始化时注意边界之外的格子到终点的距离是无穷大的。

class Solution {
  public int minPathSum(int[][] grid) {
       int m=grid.length;
       int n=grid[0].length;
       return uniquePaths(m,n,grid);
  }
   public int uniquePaths(int m, int n,int[][] grid) {
       int[] dp=new int[n+1];
       for (int i = 0; i <= n; i++) {
           //dp[i]初值表示格子最下排之外的位置。无法到达终点,设为无穷大。
           dp[i]=Integer.MAX_VALUE;
      }
       dp[n-1]=0;//终点正下方到终点距离设为0
       for (int i=m-1;i>=0;i--){
           for (int j=n-1;j>=0;j--){
               dp[j]=grid[i][j]+Math.min(dp[j],dp[j+1]);
          }
      }
       return dp[0];
  }
}

执行结果:

通过

执行用时 :3 ms, 在所有 Java 提交中击败了98.16%的用户

内存消耗 :42.7 MB, 在所有 Java 提交中击败了38.00%的用户

posted @ 2019-08-16 14:41  pibaba  阅读(254)  评论(0编辑  收藏  举报