题目描述:
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).
逐层计算从头开始到每一层的每一个位置的路径的最小和,然后在最后一层的所有位置的最小路径和中选取最小的即可。
AC代码如下:
class Solution{
public:
int minimumTotal(vector<vector<int>>& triangle)
{
int n = triangle.size();
if (n == 0) return 0;
vector<int> ans(n, 0);
ans[0] = triangle[0][0];
for (int i = 1; i < n; ++i){
int tmp1 = ans[0];
ans[0] = ans[0] + triangle[i][0];
for (int j = 1; j < i; ++j){
int tmp2 = ans[j];
ans[j] = min(tmp1, tmp2) + triangle[i][j];
tmp1 = tmp2;
}
ans[i] = tmp1 + triangle[i][i];
}
int minAns = ans[0];
for (int i = 1; i < n; ++i) minAns = min(minAns, ans[i]);
return minAns;
}
};