前端js面试---斐波那契数列

题型一

写一个函数,输入 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

题解:

var fib = function(n) {
    const MOD = 1000000007;
    if (n < 2) {
        return n;
    }
    let p = 0, q = 0, r = 1;
    for (let i = 2; i <= n; ++i) {
        p = q; 
        q = r; 
        r = (p + q) % MOD;
    }
    return r;
};

​题型2:爬楼梯

假设你正在爬楼梯,需要n阶你才能爬到楼顶。

每次你可以怕1或者2个台阶,你有多少种不同的方法可以爬到楼顶呢?

示例1:

输入: n = 2
输出: 2
解释: 有两种方法可以爬到楼顶
1. 1阶 + 1阶
2. 2阶

示例2:

输入: n = 3
输出: 3
解释: 有三种不同的方法可以爬到楼顶
1. 1阶 + 1阶 + 1阶
2. 1阶 + 2阶
3. 2阶 + 1阶

解题思路:

从题目可理解为,1阶为1,2阶为2,3阶为3,4阶为5.不难看出,考察斐波那契数列的运用,由此,有两种解题思路。

1.迭代中用变量保存前数值和

2.用斐波那契数列方式将前数和保存在数组中

// 第一种迭代中用变量保存前数值和
var climbStairs = function(n) {
    let a=0,b=0,c=1
    for(let i =0;i<n;i++){
        a=b
        b=c
        c=a+b
    }
    return c
};
2.用斐波那契数列方式将前数和保存在数组中
var palouti = function(n) {
  let arr = [1,2];
  if(n<3){
    return n
  }else {
    for(i = 3;i<n;i++)
    arr[i] = arr[i-2]+ arr[i-1]
  }
  return arr[i]
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值