Triangle
2015-04-10 15:03 笨笨的老兔子 阅读(182) 评论(0) 编辑 收藏 举报给定一个二维整数向量,里面存有一个三角形,三角形中每一个点的值表示到达该点的开销,每一步只能到下一层的相邻节点,求从顶点到底部开销最小的路径,返回其开销。
2
3,4
6,5,7
4,1,8,3
2 + 3 + 5 + 1 = 11
思路:从顶点开始将每一层的点更新为到达该点所需要的最小开销,最终查找底层的最小值即可。
class Solution {
public:
int minimumTotal(vector<vector<int> > &triangle) {
if (triangle.empty())
{
return 0;
}
for (size_t i = 1; i < triangle.size(); i++)
{
vector<int>& preTri = triangle[i - 1];
vector<int>& currentTri = triangle[i];
currentTri[0] += preTri[0];
for (size_t j = 1; j < currentTri.size()-1; j++)
{
currentTri[j] += min(preTri[j - 1], preTri[j]);
}
currentTri[currentTri.size() - 1] += preTri[preTri.size() - 1];
}
int min = INT_MAX;
int triNum = triangle.size()-1;
for (size_t i = 0; i < triangle[triNum].size(); i++)
{
if (triangle[triNum][i]<min)
{
min = triangle[triNum][i];
}
}
return min;
}
};