题目(leecode T509):
斐波那契数 (通常用 F(n)
表示)形成的序列称为 斐波那契数列 。该数列由 0
和 1
开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n
,请计算 F(n)
。
方法:本题是动态规划的第一道题。动态规划的题目需要遵守五步走的过程:
- 确定dp数组(dp table)以及下标的含义
- 确定递推公式
- dp数组如何初始化
- 确定遍历顺序
- 举例推导dp数组
本题是一道入门级别的简单题,因为题目中已经给了我们所有需要的信息并不需要我们自己去推导。
dp数组含义dp[i]就代表第i个数字的斐波那契值
递推公式就是dp(n) = dp(n - 1) + dp(n - 2)
初始化dp[0]=0,dp[1]=1
因为第i个数的斐波那契值需要由i-1和i-2两个数得到,因此要从前向后遍历
按照计算前10个数的斐波那契值是0 1 1 2 3 5 8 13 21 34 55
题解:
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]; //递推公式
}
return dp[n];
}
};