仍是数字三角形问题,求从三角形顶端到最底层最小路径和。
题目要求空间复杂度O(n),那么就要将二维数组压缩为一维。因DP中历史状态只能通过当前状态影响下一个状态,所以压缩数组是可行的。
数字三角形如下:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
import java.util.*;
public class Solution {
public int minimumTotal(ArrayList<ArrayList<Integer>> triangle) {
if(triangle == null||triangle.size() == 0)
return 0;
//int [][]temp=new int [triangle.size()][triangle.size()];
//压缩数组temp:
int []temp=new int[triangle.size()];
for(int col=0;col<triangle.size();col++)
{
temp[col]=triangle.get(triangle.size()-1).get(col);
}
for(int i=triangle.size()-2;i>=0;i--)
{
for(int j=0;j<=i;j++)
{
int min= temp[j]<temp[j+1]?temp[j]:temp[j+1];
temp[j]=min+triangle.get(i).get(j);
}
}
return temp[0];
}
}