一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
f(n)=f(n-1)+f(n-2)+......+f(1)+1
经过数值举例后,我们发现,台阶对应的跳法实际上是
1 2 4 8 16 32......
故代码实现就非常明确
class Solution {
public:
int jumpFloorII(int number) {
int ret =1;
for(int i = 2; i <= number; ++i)
{
ret *= 2;
}
return ret;
}
};
精益求精,计算2^(n-1)次方,用移位运算会更快。
class Solution {
public:
int jumpFloorII(int number) {
int ret=1;
return ret<<(number-1);
}
};