问题描述
给定一个三角矩阵, 计算从三角矩阵顶部到底部的最小路径和, 每一步都可以移动到下面一行相邻的数字
比如, 给定下面的三角矩阵
[2]
[3] [4]
[6] [5] [7]
[4] [1] [8] [3]
最小的从顶部到底部的路径和层为2 + 3 + 5 + 1 = 11
思路1
class Solution {
public:
int minimumTotal(vector<vector<int> > &triangle) {
vector<vector<int>> v(triangle);
int row = triangle.size();
int minPath;
for (int i = 1; i < row; ++i)
{
for (int j = 0; j <= i; ++j)
{
if (j == 0)
{
v[i][j] += v[i - 1][j];
}
else if (j == i)
{
v[i][j] += v[i - 1][j - 1];
}
else
{
v[i][j] += min(v[i - 1][j], v[i - 1][j - 1]);
}
//v[i][j] += triangle[i][j];
}
}
minPath = v[row - 1][0];
for (int i = 0; i < row; ++i)
{
minPath = min(minPath, v[row - 1][i]);
}
return minPath;
}
};
思路2
class Solution {
public:
int minimumTotal(vector<vector<int> > &triangle) {
vector<vector<int>> v(triangle);
int len = triangle.size();
for (int i = len - 2; i >=0; --i)
{
for (int j = 0; j <= i; ++j)
{
v[i][j] = min(v[i + 1][j], v[i + 1][j + 1]) + v[i][j];
}
}
return v[0][0];
}
};