给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
//n为数组的长度,楼梯的个数
int n=cost.size();
//dp数组表示到第n阶楼梯的花费
vector<int>dp(n+1);
//可以从0开始也可以从1开始
dp[0]=0,dp[1]=0;
//计算dp中每一项的值
for(int i=2;i<=n;i++){
//状态转移方程: 第n阶楼梯的花费=(前一阶楼梯的花费+该楼梯花费)和(前两阶楼梯的花费+该楼梯花费中)的最小值 可以选择爬一个或者两个台阶
dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
}
//返回到楼梯的花费
return dp[n];
}
};
239

被折叠的 条评论
为什么被折叠?



