120. 三角形最小路径和
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
例如,给定三角形:
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。
说明:
如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。
Code(Java)
使用二维数组:
static class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
Integer[][] a = new Integer[triangle.size()][];
for (int i = 0; i < triangle.size(); i++) {
a[i] = new Integer[triangle.get(i).size()];
triangle.get(i).toArray(a[i]);
}
for (int i = a.length - 2; i >= 0; i--) {
for (int j = 0; j < a[i].length; j++) {
a[i][j] += Math.min(a[i + 1][j], a[i + 1][j + 1]);
}
}
return a[0][0];
}
}
使用一维数组
static class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
Integer[] a = new Integer[triangle.size()];
triangle.get(triangle.size() - 1).toArray(a);
for (int i = triangle.size() - 2; i >= 0; i--) {
for (int j = 0; j < triangle.get(i).size(); j++) {
a[j] = triangle.get(i).get(j) + Math.min(a[j], a[j + 1]);
}
}
return a[0];
}
}