这是 LeetCode 上 2021-9-4 的每日一题:「剑指 Offer 10- I. 斐波那契数列」
1. 题目描述
写一个函数,输入 n
,求斐波那契(Fibonacci)数列的第 n
项(即 F(N)
)。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由0
和1
开始,之后的斐波那契数就是由之前的两数相加而得出。
答案需要取模1e9+7
(1000000007),如计算初始结果为:1000000008
,请返回1
。
示例1:
输入:n = 2
输出:1
示例2:
输入:n = 5
输出:5
2. 解答
这是一道动态规划经典例题,使用动态规划来解题。
dp[i]
含义:斐波那契数列的第i
个数为dp[i]
- 递推公式:根据定义易得:
dp[i] = (dp[i - 1] + dp[i - 2])
- dp数组初始化:题目已经给出:
dp = [0, 1]
- 遍历顺序:根据定义,当前数依赖于前两个数,所以从前向后遍历
- 注意取模
(% 1000000007)
const fib = n => {
const dp = [0, 1];
for (let i = 2; i <= n; i++) {
dp[i] = (dp[i - 1] + dp[i - 2]) % 1000000007;
}
return dp[n];
};
😄最近新创建了个开源仓库,总结LeetCode的每日一题,目前已有C++、JavaScript语言版本,欢迎大家提供其他语言版本!
🖥️仓库地址:「每日一题系列」