视频讲解:https://www.bilibili.com/video/BV1f5411K7mo/?vd_source=a935eaede74a204ec74fd041b917810c
动归五步法:
- 确定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个斐波那契数。
cpp
class Solution {
public:
int fib(int n) {
//1.确定dp[i]含义:第i个斐波那契数列的数值
//2.确定递推公式:dp[i] = dp[i-1] + dp[i - 2];
//3.初始化dp
int 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到i
sum = dp0 + dp1;
dp0 = dp1;
dp1 = sum;
}
return sum;
}
};