分析
1.归纳:求出前几个的方法数:
1 -> 1
2 -> 2
3 -> 4
4 -> 8
...
可推出:F(n) = 2*F(n-1)
递归求解
class Solution {
public:
int jumpFloorII(int number) {
if(number <= 2)
{
return number;
}
else
{
return 2*jumpFloorII(number-1);
}
}
};
使用移位
其实上面的规律就是一个等比数列,用公式:An = A1*q^(n-1)
就好,其中A1=1, q=2
也就是An=2^(n-1)
。为了进一步优化,使用移位代替乘,也就是1<<(n-1)
,代码如下:
class Solution {
public:
int jumpFloorII(int number) {
if(number <= 2)
{
return number;
}
else
{
return 1<<(number-1);
}
}
};