【牛客网-剑指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);
}