已经麻了,熟了,就巧了。
参考链接:
边界问题研究,或者说,问题分析。
有n层楼梯,从第一层或者第二层开始走,一次走一步或者两步,直到楼梯顶部,也就是第n+1层。
那么对应下标是从0或1开始到n。
对于这个记录数组来说
基础值:dp[0]=dp[1]=0
公式:dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
式子什么意思?
到达第i层,有两种可能,
- 从第i-1层走一步,花费为
dp[i-1]+cost[i-1]
- 从第i-2层走两步,花费为
dp[i-2]+cost[i-2]
这就可以了,就可以上代码了:
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
//记录数组
int n=cost.size();
int dp[n+1];
//基础值
dp[0]=0;
dp[1]=0;
//公式
//dp[i]=min(dp[i-1]+nums[i-1],dp[i-2]+nums[i-2])
for(int i=2;i<=n;i++){
dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
}
return dp[n];
}
};
一定要注意,边界:
int dp[n+1];
for(int i=2;i<=n;i++)
return dp[n];
我们要的就是dp[n]
,不是dp[n-1]