代码随想录算法训练营day32
1.斐波那契数列
1.1 题目
. - 力扣(LeetCode)
1.2 题解
class Solution
{
public:
int fib(int n)
{
if(n==0)return 0;
if(n==1)return 1;
//确定dp数组,dp[n]表示第n个斐波那契数数值
vector<int> dp(n+1);
//确定递推公式
//dp[n]=dp[n-1]+dp[n-2];
//初始化dp数组
dp[0]=0;
dp[1]=1;
//前序遍历
for(int i=2;i<=n;i++)
{
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
};
2.爬楼梯
2.1 题目
. - 力扣(LeetCode)
2.2题解
class Solution
{
public:
int climbStairs(int n)
{
//确定dp数组,dp[n]表示爬到n阶有几种方法
vector<int> dp(n+1);
//确定递推公式
//dp[n]=dp[n-1]+dp[n-2]
//初始化dp数组
dp[0]=1;
dp[1]=1;
//递归,前序遍历
for(int i=2;i<=n;i++)
{
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
};
3.使用最小花费爬楼梯
3.1 题目
. - 力扣(LeetCode)
3.2 题解
class Solution
{
public:
int minCostClimbingStairs(vector<int>& cost)
{
//确定dp数组,dp[n]表示爬到第n层楼梯的最低消费
vector<int> dp(cost.size()+1);
//确定递推公式
//dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
//初始化
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]);
}
return dp[cost.size()];
}
};