注意:如果你能只用O(N)的额外的空间来完成这项工作的话,就可以得到附加分,其中N是三角形中的行总数。
大致思路:动态规划。用一个tmp数组存储第i行的所有数对应的最小路径和。0和i中间的元素(i,j)的最小路径和等于tmp(i-1,j),tmp(i-1,j-1)的较大值加上(i,j)的值并且从后遍历到前;tmp(i,0)=tmp(i-1,0)+(i,j),tmp(i,i)=tmp(i-1,i-1)+(i,j),这样可以实现O(N)。最后返回tmp的最小值即可。
public class Solution {
public int minimumTotal(ArrayList<ArrayList<Integer>> triangle) {
if(triangle==null) return