您的位置:首页 > 其它

120. Triangle

2016-02-10 19:30 330 查看
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, where n is the total number of rows in the triangle.

public int minimumTotal(List<List<Integer>> tr) {
if(tr == null || tr.size() == 0) return 0;
int[] min = new int[tr.size()];   //记录每行的最小值
min[0] = tr.get(0).get(0);
for(int i = 1;i < tr.size();i++){  //迭代计算每行的最小sum
int last = Integer.MAX_VALUE;
List<Integer> cur = tr.get(i);
for(int j = 0;j < cur.size()-1;j++){
int tmp = Math.min(min[j],last);
last = min[j];
min[j] = cur.get(j)+tmp;
}
min[cur.size()-1] = cur.get(cur.size()-1)+last;
}
int minum = min[0];
for(int i = 1;i < tr.size();i++){ //计算最小sum
if(min[i] < minum) {
minum = min[i];
}
}
return minum;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: