开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情
引言
算法的技能对于程序员是百益而无一害,作为程序员无论是前端还是后端算法技能对于我们都是十分十分的重要,我将陆续整理并讲解前端程序员必须掌握的经典算法。
题目描述
写一个函数,输入 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
提示:
0 <= n <= 100
分析
根据题目的分析,我们如何设计一个简单的斐波那契数列,首先仔细分析其蕴含的数学规律,我们可以轻松的完成设计。
1。初始化第一个元素和第二个元素的初始值 2. 从第三个元素开始,每个元素的值都是前面两个元素的值和 3. 循环到最后一个位置,其中最后一个位置就是题目需要的结果 4. 返回最后的结果。
解答
```
/**
* @param {number} n
* @return {number}
*/
var fib = function(n) {
let res = []
res[0] = 0,res[1] = 1
for(let i=2;i<=n;i++) {
res[i] = (res[i-1]+res[i-2]) % 1000000007
}
return res[n]
};
```
通过动态规划的解决,仅仅使用o(n)的时间复杂度和空间复杂度完成题目的解答,十分的简单。
总结
通过对上面题目使用动态规划的应用,我们发现了其灵活的处理过程和简单的设计思想,大家可以继续强化不断加深算法思想。