【代码随想录day 32】 力扣 509.斐波那契数列
视频讲解:https://www.bilibili.com/video/BV1f5411K7mo/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/0509.%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0.html#%E6%80%9D%E8%B7%AF
力扣题目:https://leetcode.cn/problems/fibonacci-number/
动归五步法:
- 确定dp[i]的含义:表示第i+1个斐波那契数
- 确定递推公式:dp[i] = dp[i-1] + dp[i - 2];
- 初始化dp:dp0 = 1; int dp1 = 1;
- 遍历顺序:从前往后依次遍历
- 打印dp数组,便于调试
可以设定一个数组来存储斐波那契数列,简单点也可以只用三个数循环更新,因为我们只需要前两个数来计算第三个数,所以设置dp0,dp1,sum,从i=2时加到i=n-1时sum就表示dp[n-1],也就是第n个斐波那契数。
class Solution {
public:int fib(int n) {//1.确定dp[i]含义:第i个斐波那契数列的数值//2.确定递推公式:dp[i] = dp[i-1] + dp[i - 2];//3.初始化dpint dp0 = 1;int dp1 = 1;int sum;if(n == 0){return 0;}if(n == 2 || n == 1){return 1;}//4.遍历顺序for(int i = 2; i < n ; ++i){//求的是dp[i+1],n是从1到n,dp[i]是从0到isum = dp0 + dp1;dp0 = dp1;dp1 = sum;}return sum;}
};