题目链接
思路
- 这道题和上到题类似,设f(i,j)为从原点走到坐标为(i,j)的地点的最小路径
- 因此有f(i,j)=min{f(i-1,j),f(i,j-1)}+cost(i,j)
- 对于边界值,就是从开头到现在的累加和
- 同样可以用一个数组保存~
class Solution {
public int minPathSum(int[][] grid) {
int[] dp = new int[grid[0].length];
dp[0] = grid[0][0];
for(int i = 1 ; i < dp.length ; i++){
dp[i] += dp[i-1] + grid[0][i];
}
for(int i = 1 ; i < grid.length ; i++){
dp[0] += grid[i][0];
for(int j = 1 ; j < grid[0].length;j++){
dp[j] = Math.min(dp[j-1],dp[j]) + grid[i][j];
}
System.out.println(Arrays.toString(dp));
}
return dp[grid[0].length-1];
}
}