leetcode-三角形最小路径

给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。

例如,给定三角形:

1
2
3
4
5
6
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]

自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。

说明:

如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。

思路

1
如上图中的三角形,考虑到4的最小路径为到6的最小路径+4;到1的最小路径为min(到6的最小路径,到5的最小路径)+1;。。。。。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Solution {
public int minimumTotal(List<List<Integer>> t) {
int[] preArr=new int[t.size()];
for(int i =0;i<t.size();i++){
if(i==0){
preArr[i]=t.get(0).get(0);
}else{
preArr[i]=Integer.MAX_VALUE;
}
}
for(int i=1;i<t.size();i++){
List<Integer>arr = t.get(i);
int temp =preArr[0];
for(int j =0;j<arr.size();j++){
if(j==0){
preArr[j]=preArr[j]+arr.get(j);
}else{
int temp1=preArr[j];
preArr[j]=arr.get(j)+(temp>temp1?temp1:temp);
temp=temp1;
}
}
}
int re=preArr[0];
for(int i =1;i<preArr.length;i++){
re=(re>preArr[i]?preArr[i]:re);
}
return re;

}
}