题目大意
给定一个三角形数组,然后求从上到下走一条路径的最小和是多少,注意每一步只能移动到下一行的相邻结点上。
分析
一道比较水的动态规划题,就是当初的数字三角形,dp[i][j] = min(dp[i - 1][j],dp[i - 1][j - 1]) + triangle[i][j]。
代码
class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int n = triangle.size();
int dp[][] = new int[n][n];
dp[0][0] = triangle.get(0).get(0);
for(int i = 1; i < n; i++) {
for(int j = 0; j <= i; j++) {
if(j == 0) {
dp[i][j] = dp[i - 1][j] + triangle.get(i).get(j);
continue;
}
if(j == i) {
dp[i][j] = dp[i - 1][j - 1] + triangle.get(i).get(j);
continue;
}
dp[i][j] = Math.min(dp[i - 1][j], dp[i - 1][j - 1]) + triangle.get(i).get(j);
}
}
int minm = dp[n - 1][0];
for(int i = 1; i < n; i++) {
minm = Math.min(minm, dp[n - 1][i]);
}
return minm;
}
}