class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
vector<int> dp(cost.size());
dp[0] = cost[0];
dp[1] = cost[1];
for(int i=2;i < cost.size(); i++){ // 条件这里1.忘记写从2开始 语法也不太熟悉
// 2. 条件多写了等于号
dp[i] = min(dp[i-1], dp[i-2]) + cost[i];
std::cout << "i的当前值是:" << i << std::endl;
std::cout << "dp i的当前值是:" << dp[i] << std::endl;
}
return min(dp[cost.size() - 1], dp[cost.size() - 2]);// 最后这里输出条件写的不对 写成了dp[i]
}
};
这里想的很深的话 容易绕进去到底第一步和顶层最后一步要不要计算花费?记住只算一头就成,这里用的是,计算第一步的时候就需要支出花费了,最后一层不需要,直接看到最后两层楼梯的时候总数是多少,从中选择较小的一个就可以。
其实简单的用直觉理解,还很清晰。
最后不要忘了 输出是dp table中最后两个输出中的最小值 表示在顶层{第cost.size() +1层}的时候回头去看前面两层,都是不需要花费就能够到达顶层了。
PS:
注意记一下这里的输出格式 std::cout << std::endl l表示换行 << 用来分割元素