给定一个三角形 triangle ,找出自顶向下的最小路径和。
每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。
解题思路:
经过观察我们可以得到递推式
当x+1 < triangle.lenght && x >= 0 && j>=0
时成立
f[x][j] += Math.min(f[x+1][j],f[x+1][j+1]);
这里我们可以直接使用原有数组从底至顶开始递推,因为最后一层并不需要改变所以我们从倒数第二层开始推导,最上层的结果即是答案。
class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
for (int i = triangle.size() - 2; i >= 0; i--) {
for (int j = 0; j < triangle.get(i).size(); j++) {
triangle.get(i).set(j, Math.min(triangle.get(i +1).get(j), triangle.get(i + 1).get(j + 1)) + triangle.get(i).get(j));
}
}
return triangle.get(0).get(0);
}
}
``