剑指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 | int jumpFloorII(int number) { |
乘方可用移位优化
1 | int jumpFloorII(int number) { |