509. 斐波那契数
// 1、dp的含义
// 2、递推公式
// 3、初始化dp数组
// 4、方向
// 5、打印dp
class Solution {
public:
int fib(int n) {
if (n<=1){
return n;
}
vector<int> dp(n+1);
dp[0]=0;
dp[1]=1;
for (int i=2; i<=n; i++){
dp[i] = dp[i-1]+dp[i-2];
}
for (int i=0; i<n; i++){
cout<<dp[i];
}
return dp[n];
}
};
70. 爬楼梯
class Solution {
public:
int climbStairs(int n) {
vector<int> dp(n+1);
dp[0]=1;
dp[1]=1;
for(int i=2; i<=n; i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
};
746. 使用最小花费爬楼梯
// 1、dp[i]的含义是到达第i层所需的最小总花费
// 2、dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])
// 3、dp[0]=0, dp[1]=0
// 4、从前往后遍历
// 5、打印dp
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) { //楼梯顶部是cost.size();位置,此处没有对应的cost
vector<int> dp(cost.size()+1); //di保存的是到i层的最小花费
dp[0]=0;
dp[1]=0;
for (int i=2; i<=cost.size(); i++){
dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]);
}
for (int i :dp){
cout << i;
}
return dp[cost.size()];
}
};
注意楼梯顶部位置为cost.size(),此处没有对应的cost因为已经到顶了。