写一个函数,输入 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。
/**
* @param {number} n
* @return {number}
*/
var fib = function(n) {
if (n === 0) return 0
if (n === 1) return 1
// const arr = [...Array(n + 1).keys()].reduce((prev, item) => { //88ms
// if ( item === 0 ) { prev.push(0) }
// if ( item === 1 ) { prev.push(1) }
// if (![0, 1].includes(item)) {
// prev.push((prev[prev.length - 1] + prev[prev.length - 2]) % (1e9+7))
// }
// return prev
// }, [])
// let arr = [0, 1]
// let i = 2
// while (i < n + 1) { // 80ms
// arr.push((arr[arr.length - 1] + arr[arr.length - 2]) % (1e9+7))
// i++
// }
// return arr[arr.length - 1]
// let arr = [0, 1] // 80ms
// for (let i = 2; i < n + 1; i ++) {
// arr.push((arr[arr.length - 1] + arr[arr.length - 2]) % (1e9+7))
// }
// return arr[arr.length - 1]
let res1 = 0
let res2 = 1
for (let i = 2; i < n + 1; i ++) { // 60ms
let t = res1
res1 = res2
res2 = (t + res1) % (1e9+7)
// arr.push((arr[arr.length - 1] + arr[arr.length - 2]) % (1e9+7))
}
return res2
};