剑指offer10-1.斐波那契数列 javascript

写一个函数,输入 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
};
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值