题目链接
法一(动态规划)
public int minimumTotal(List<List<Integer>> triangle) {
int rowSize = triangle.size();
int[][] dp = new int[rowSize + 1][rowSize + 1];
for (int row = rowSize - 1; row >= 0; row--) {
List<Integer> colInfo = triangle.get(row);
for (int col = 0; col < colInfo.size(); col++) {
dp[row][col] = Math.min(dp[row + 1][col], dp[row + 1][col + 1]) + colInfo.get(col);
}
}
return dp[0][0];
}
本地测试
lay.showTitle(120);
Solution120 sol120 = new Solution120();
Integer[][] triangleArr120 = new Integer[][]{{2}, {3, 4}, {6, 5, 7}, {4, 1, 8, 3}};
List<List<Integer>> triangle120 = Arrays.stream(triangleArr120).map(Arrays::asList).collect(Collectors.toList());
arrayOpt.showIntLists(triangle120);
System.out.println(sol120.minimumTotal(triangle120));