【牛客网-剑指offer】变态跳台阶

题目:

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

考点:

递归和循环

分析:

台阶数 跳法
1 1
2 2
3 4
4 8
5 16
6 32
7 64
8 128
... ...
归纳:f(n)=2*f(n-1);

代码实现:

function jumpFloorII(n)
{
    // write code here
       var fb = [1, 2];
    for (var i = 2; i <= n; i++) {
        fb.push(fb[i - 1]*2);
    }
    // console.log(fb[n])
    return fb[n-1];
}

有大佬想到的另一种思路:

因为跳法1,2,4,8,16,32....即2^(n-1)

利用1左移来求数

左移位数 左移 结果
1<<0 0000 0001 1
1<<1 0000 0010 2
1<<2 0000 0100 4
1<<3 0000 1000 8
1<<(--n) ... 2^(n-1)

代码实现:

function Fibonacci(n) {
    return 1<<(--n);
}
posted @ 2019-09-25 17:21  侠客cp  阅读(91)  评论(0编辑  收藏  举报