本题注意终点不是数组的最后一个位置,应该是最后一个位置的下一个位置,因此我们直接初始化的时候,就将楼梯的高度加上一,以能到达添加一个楼梯高度的最高点位终点

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int n = cost.size();
        if(n<2) return 0;
        int dp1 = 0, dp2 = 0, dp3;
        for(int i = 2; i<=n; i++){
            dp3 = min(dp1 + cost[i-2], dp2 + cost[i-1]) ;
            dp1 = dp2;
            dp2 = dp3;
        }
        return dp3;
    }
};


class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int n = cost.size();
        if(n<2) return 0;
        int dp1 = cost[0], dp2 = cost[1], dp3;
        for(int i = 2; i<n; i++){
            dp3 = min(dp1, dp2) + cost[i];
            dp1 = dp2;
            dp2 = dp3;
        }
      // 注意这里,最终从倒数第一个或者最后一个位置,可以跳出楼梯
        return min(dp3, dp1);
    }
};