动态规划:
dp[i]
表示爬上第i
级楼梯的最小花费
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
cost.push_back(0); //后面加个0,将阶梯顶视为第n层(没加0前的第n层,加0后的第n-1层)
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] = min(dp[i-1], dp[i-2]) + cost[i];
}
return dp[n-1]; //cost原来的第n层
}
};
或者
class Solution {
public:
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] = min(dp[i-1], dp[i-2]) + cost[i];
}
return min(dp[n-1], dp[n-2]);
}
};