方法:动态规划

根据题设:一旦你支付此费用,即可选择向上爬一个或者两个台阶。可以将问题分解为:最后选择爬一个台阶和两个台阶这两种方案的较小值即为最小花费。

时间复杂度: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];
    }
};