对于第一个示例的理解:从cost[1]开始为啥不是走一步到顶,而是走两步到顶?
所谓的到顶,也就是走到 i == cost.size() 的时候,那我可以人为的加上一节为0的台阶,这样就不用对边界特殊处理。
爬到第 i 阶楼梯的花费:min(i-1阶花费,i-2阶花费)
从当前第 i 阶楼梯开始出发的花费:cost[i] + min(i-1阶花费,i-2阶花费)
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
cost.push_back(0);
if (cost.size() <= 2)
return cost[0];
int dp0 = cost[0];
int dp1 = cost[1];
int dp2 = 0;
for (int i = 2; i < cost.size(); i++) {
dp2 = min(dp0, dp1);
dp0 = dp1;
dp1 = dp2 + cost[i];
}
return dp2;
}
};