本文已参与「新人创作礼」活动,一起开启掘金创作之路。
问题
给定一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用,下标从0开始。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
代码实现
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param cost int整型vector
* @return int整型
*/
int minCostClimbingStairs(vector<int>& cost) {
// write code here
// dp 存储到达每级台阶的最小费用
vector<int> dp(cost.size()+1, 0);
// 因为可以从第一级或第二级台阶开始,所以 dp[0] 和 dp[1] 为 0
for (int i = 2; i <= cost.size(); i++)
{
// 比较前一级向上走一个台阶 和 前两级向上两个台阶
dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
}
return dp[cost.size()];
}
};