- dp[i] 表示 爬到 i 层的最小花费
- 与爬楼梯一样,i 阶楼梯与 i - 1阶, i - 2阶有关,两者选较小者
因此递推公式为: dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]); - 因为可以选择0阶或者1阶出发,因此初始化 dp[0] = 0; dp[1] = 0;
- 顺序进行遍历
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
vector<int> dp(cost.size() + 1);
dp[0] = 0;
dp[1] = 0;
for(int i = 2; i < cost.size() + 1; i++){
dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
}
return dp.back();
}
};