首页 > 代码库 > LeetCode 64. Minimum Path Sum Java
LeetCode 64. Minimum Path Sum Java
题目:
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time.
题意及分析:给出一个m*n大的网格,每个网格中的数字都为非负的术,每次能向右或者向下移动一格,求找到从最左上角的格子到最右下角的格子和最小的路径。本题我采用动态规划的解法,对于其中一点grid[i][j](i<i<m.i<j<n),因为只有两种方法到达该点,所以到这点的最短路径只能是上一点或者左边的点的最短路劲加上当前点的值,即d(grid[i][j])=min{d(grid[i][j-1]),d(grid[i-1][j])} + grid[i][j]。对于第一行或者第一列来说都只有一种情况到达该点,所以需要直接由前一个点的最短路径加上当前点值即可。遍历整个网格,便可以得到最终值。
代码:
public class Solution { public int minPathSum(int[][] grid) { int m=grid.length; //行 int n=-1; //列 if(m!=0) n=grid[0].length; int[][] A=new int[m][n]; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(i==0||j==0){ if(i==0&&j!=0){ A[i][j]=A[i][j-1]+grid[i][j]; //第一行的值等于前一个值加上当前值 }else if(i!=0&&j==0){ A[i][j]=A[i-1][j]+grid[i][j]; //第一列的值等于加上当前格子的值 }else { A[i][j]=grid[i][j]; //起始点,就为起始点本身的值 } }else{ A[i][j]=Math.min(A[i][j-1]+grid[i][j],A[i-1][j]+grid[i][j]); } } } return A[m-1][n-1]; } }
LeetCode 64. Minimum Path Sum Java
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。