价值:记录学习过程的思考,本身就是一场动态规划的前生,记忆化搜索。
// dp[i][j] = 路径到达这个点(i,j)的 和 的 最值 min
// dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j];
class Solution {
public int minPathSum(int[][] grid) {
if(grid == null || grid.length == 0 || grid[0].length == 0) return 0x7fffffff;
//dp[i][j]=min( dp[i-1][j],dp[i][j-1] ) + grid[i][j];
int n = grid.length;
int m = grid[0].length;
int[][] dp = new int[n][m];
dp[0][0] = grid[0][0];
for(int i=1;i<n;i++){
dp[i][0] = dp[i-1][0] + grid[i][0];
}
for(int j=1;j<m;j++){
dp[0][j] = dp[0][j-1] + grid[0][j];
}
for(int i = 1; i < n ; i++){
for(int j = 1; j < m; j++){
dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j];
}
}
return dp[n-1][m-1];
}
}