package Triangle; import java.util.List; import java.util.stream.Collectors; /** * User: Danyang * Date: 1/26/2015 * Time: 23:52 * * 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 { /** * dp * let f[i][j] represent the minimal path sum from bottom to i, j * f[i][j] = min(f[i+1][j], f[i+1][j+1])+t[i][j] * @param triangle * @return */ public int minimumTotal(List> triangle) { List> f = triangle.stream() .map(e -> e.stream().map(e2->0).collect(Collectors.toList())) .collect(Collectors.toList()); for(int i=0; i-1; i--) { for(int j=0; j