LeetCode 64 .Minimum Path Sum
题目链接:https://leetcode.com/problems/minimum-path-sum/description/
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.
Example 1:
[[1,3,1],
[1,5,1],
[4,2,1]]
Given the above grid map, return
7
. Because the path 1→3→1→1→1 minimizes the sum.
这是一道非常典型的动态规划题,动态规划需要利用到上一次的结果,是一种特殊的迭代思想,关键是要找出状态方程(递推递推关系式),设在(i,j)点的最小和为s[i,j],则s[i,j]=Min(s[i-1,j],s[i,j-1])+grid[i][j];再考虑一些边界情况,即s[i-1,j]或者s[i,j-1]不存在,即二维数组只有一行或一列时,最小和为数组所有元素之和,需要考虑这两种边界情况。
class Solution {
public int minPathSum(int[][] grid) {
int m=grid.length;
int n=grid[0].length;
int [][]sum=new int[m][n];
sum[0][0]=grid[0][0]; //二维数组sum存储在不同位置的最小和。
for(int i=1;i<m;i++){ //左边界
sum[i][0]=sum[i-1][0]+grid[i][0];
}
for(int j=1;j<n;j++){ //上边界
sum[0][j]=sum[0][j-1]+grid[0][j];
}
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
sum[i][j]=Math.min(sum[i-1][j], sum[i][j-1])+grid[i][j];
}
}
return sum[m-1][n-1];
}
}