Example 1:
Input: cost = [10, 15, 20]
Output: 15
Explanation: Cheapest is start on cost[1], pay that cost and go to the top.
Example 2:
Input: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
Output: 6
Explanation: Cheapest is start on cost[0], and only step on 1s, skipping cost[3].
这个问题是属于dp问题,我们需要求得一个台阶的最小累计值,我们就应该用这个台阶的数加上前两层台阶的较小者,根据这个规律,我们就可以dp了,详情看如下代码:
int minCostClimbingStairs(vector<int>& cost) {
int n = cost.size();
vector<int> dp(n, 0);
dp[0] = cost[0];
dp[1] = cost[1];
for(int i=2;i<n;i++)
{
dp[i] = cost[i] + min(dp[i-1], dp[i-2]);
}
return min(dp[n-1], dp[n-2]);
}