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