120. 三角形最小路径和
题目:


题解:
java
class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int[][] dp = new int[triangle.size()+1][triangle.size()+1];
dp[0][0]=triangle.get(0).get(0);
//从最后一行开始递推
for(int i=triangle.size()-1;i>=0;i--) {
for(int j=0;j<=i;j++) {
//当前行的最小路径和就是下一行的j,j+1两个位置的最小值+当前值
dp[i][j]=Math.min(dp[i+1][j],dp[i+1][j+1])+triangle.get(i).get(j);
}
}
return dp[0][0];
}
}
优化空间版:
java
class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
// int[][] dp = new int[triangle.size()+1][triangle.size()+1];
int[] dp = new int[triangle.size()+1];
//从最后一行开始递推
for(int i=triangle.size()-1;i>=0;i--) {
for(int j=0;j<=i;j++) {
//当前行的最小路径和就是下一行的j,j+1两个位置的最小值+当前值
dp[j]=Math.min(dp[j],dp[j+1])+triangle.get(i).get(j);
}
}
return dp[0];
}
}