dp[i] = min(dp[i - 1] + cost[ i - 1], dp[i - 2] + cost[ i - 2])
cost[ i ] 是第 i 阶 需要向上爬的费用,可以选择爬 一阶 或者 两阶
有两种途径到达 i
1. 走一步 dp[i - 1]
走一步 花费 cost[ i - 1]
2. 走两步 dp[i - 2]
走两步花费 cost[ i - 2]
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
// 数组的含义: i 表示 第几阶,dp[i] 表示花费了多少
// 递推公式 : dp[i] = min(dp[i - 1] + cost[ i - 1], dp[i - 2] + cost[ i - 2])
vector<int> dp(cost.size() + 1);
dp[0] = 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()];
}
};