剑指Offer第9题:变态跳台阶

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

解题思路:跳上n级台阶的跳法,等于跳上前n-1级台阶的所有跳法之和,即:f(n) = f(n-1) + f(n-2) + … + f(0)。可以这样考虑问题,因为青蛙可以跳的台阶数是任意的,因此,跳上n级台阶可由台阶0、台阶1、台阶2、……、台阶n-1起跳。

写出n在4以内的跳法

idx n
0 1
1 1
2 2
3 4
4 8

可以发现规律,即:$f(n) = 2^{(n-1)}$

代码

1
2
3
4
5
int jumpFloorII(int number) {
if (number<0) return 0;
if (number==0) return 1;
return pow(2, number-1);
}

乘方可用移位优化

1
2
3
4
5
int jumpFloorII(int number) {
if (number<0) return 0;
if (number==0) return 1;
return 1<<(number-1);
}