问题描述
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
例如,给定三角形:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
为了方便观看, 我们转换一下
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
解题思路
我们采用动态规划, 申请一个一维数组dp[j],他的最小值等于其下一位的值和自身的数字的最小值, 再加上三角形自身的值。 递推公式如下:
dp[i] = min(dp[i], dp[o+1]) + triangle[i][j]
参考实现过程
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int length = triangle.size();
if(length==0) return 0;
int ans=0;
vector<int> dp(triangle[length-1]);
for(int i=length-2; i>=0; i--){
for(int j=0; j<=i; j++){
dp[j] = min(dp[j], dp[j+1]) + triangle[i][j];
ans = dp[j];
}
}
return ans;
}
};