方法:动态规划
根据题设:一旦你支付此费用,即可选择向上爬一个或者两个台阶。可以将问题分解为:最后选择爬一个台阶和两个台阶这两种方案的较小值即为最小花费。
时间复杂度: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];
}
};

京公网安备 11010502036488号