动态规划。

一个小tip,将楼顶当作0花费楼梯加到cost数组和状态数组尾部,可以减少一点代码量。

#include <vector>
class Solution {
  public:
    int minCostClimbingStairs(vector<int>& cost) {
        int len = cost.size();
        vector<int> dp(len + 1); // 状态数组
        dp[0] = cost[0];
        dp[1] = cost[1];
        cost.push_back(0); // 楼顶
        for (int i = 2; i <= len; i++) {
            dp[i] = dp[i - 1] < dp[i - 2] ? dp[i - 1] + cost[i] : dp[i - 2] + cost[i];
        }
        return dp[len];
    }
};