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.
使用动态规划 递推,时间复杂度为O(n)
1 public int minimumTotal(List<List<Integer>> triangle) {//dp my 2 if(0==triangle.size()){ 3 return 0; 4 } 5 List<Integer> result = new ArrayList<>(); 6 result.addAll(triangle.get(triangle.size()-1)); 7 for(int i=triangle.size()-2;i>=0;i--){ 8 for(int j=0;j<=i;j++){ 9 int min = result.get(j)<result.get(j+1)?(result.get(j)+triangle.get(i).get(j)):(result.get(j+1)+triangle.get(i).get(j)); 10 result.set(j,min); 11 } 12 } 13 return result.get(0); 14 }
可在原始数据上修改,这样空间复杂度为O(1)