方法:动态规划
根据题设:一旦你支付此费用,即可选择向上爬一个或者两个台阶。可以将问题分解为:最后选择爬一个台阶和两个台阶这两种方案的较小值即为最小花费。
时间复杂度:o(n)。
空间复杂度:o(n)。
class Solution { public: int minCostClimbingStairs(vector<int>& cost) { //需要爬上台阶,所以大小是数组大小加1 int n = cost.size() + 1; //记录爬到对应台阶最少的花费 vector<int> res(n, 0); for (int i = 2; i <= n; i++) { //选取花费最小的方案 res[i] = min(res[i - 1] + cost[i - 1], res[i - 2] + cost[i - 2]); } return res[n - 1]; } };