Triangle @LeetCode

2014-11-24 08:42:00 · 作者: · 浏览: 1
package Level3;

import java.util.ArrayList;

/**
 * Triangle
 * 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 S120 {

	public static void main(String[] args) {
		
	}

	public int minimumTotal(ArrayList
> triangle) { int rowLen = triangle.size(); // dp数组用来存储每一格子的最优解 int[][] sum = new int[rowLen][rowLen]; // 最底下一行 ArrayList last = triangle.get(triangle.size()-1); for(int i=0; i=0; i--){ ArrayList row = triangle.get(i); for(int j=0; j<=i; j++){ sum[i][j] = Math.min(sum[i+1][j], sum[i+1][j+1]) + row.get(j); } } return sum[0][0]; } }