-
Notifications
You must be signed in to change notification settings - Fork 0
/
120_Triangle.java
30 lines (28 loc) · 922 Bytes
/
120_Triangle.java
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
/*
* 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 class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int xLen = triangle.size();
int[] dp = new int[triangle.get(xLen - 1).size()];
for(int i=xLen-1; i>=0; i--) {
int yLen = triangle.get(i).size();
for(int j=0; j<yLen; j++) {
dp[j] = triangle.get(i).get(j) + (i == xLen - 1 ? 0 : Math.min(dp[j], dp[j+1]));
}
}
return dp[0];
}
}