Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.
For example, given the following triangle
[ [2], [3,4], [6,5,7], [4,1,8,3] ]
The minimum path sum from top to bottom is 11
(i.e., 2 + 3 + 5 + 1 = 11).
Note:
Bonus point if you are able to do this using only O(n) extra space, wheren is the total number of rows in the triangle.
题意:给定一个三角形,找到从顶到底的最小路径。每次你都只能向下移动。
分类:动态规划,数组
解法1:动态规划。从底向上,对于每个元素,有左右两个选择,我们选择一个小的,更新自己的值就可以了。
重复执行一直到顶部。
例如图中,对于{6,5,7}这一行,
对于6而言,选择1会使路径比较小,
对于5而言,选择1会使路径比较小,
对于7而言,选择3会使路径比较小
那么我们就更新这一层,使这一层变成{7,6,10}
那么现在三角形就是
[2]
[3,4]
[7,6,10]
重复上述过程即可。
public class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int size = triangle.size();
while(size>1){
List<Integer> last = triangle.remove(size-1);//当前层
size--;
List<Integer> pre = triangle.get(size-1);//上一层
int i = last.size()-1;
while(i>0){//遍历当前层
pre.set(i-1, pre.get(i-1)+Math.min(last.get(i),last.get(i-1)));//更新上一层
i--;
}
}
return triangle.get(0).get(0);
}
}