题目地址:
https://leetcode.com/problems/min-cost-climbing-stairs/description/
解题思路:
官方给出的做法是倒着来,其实正着来也可以,无非就是进入某个step有两种方式,退出某一个
step也有两种方式,因此若用dp[i]表示进入第i步并预计从这里退出的最小值,dp[i] = cost[i] + min(dp[i-1],dp[i-2])
最后求退出时最小值,min(dp[i-1],dp[i])
真正写代码时不必用数组记录dp,用f1表示dp[i-2],f2表示dp[i-1].然后用dp[i-1],dp[i]更新f1,和f2
代码:
class Solution { public: int minCostClimbingStairs(vector<int>& cost) { int f1 = cost[0]; int f2 = cost[1]; for (size_t i = 2; i < cost.size(); i++) { int f3 = cost.at(i) + min(f1, f2); f1 = f2; f2 = f3; } return min(f1,f2); } };