剑指Offer第8题:跳台阶

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

解题思路:此题跟计算斐波那契数列一样,令n为台阶的阶数,则f(n)=f(n-1)+f(n-2)
注意初始条件的不同,当n=2时候,f(n)=2,与斐波那契数列之间相差一位。如下表所示,a列为最终输出的结果,b列为上一次的结果,在斐波那契数列中,f(2)=1,而在此题f(2)=2,因此需要调整初始位置,使得idx==0时,a=1,b=0

idx a b
0 0 1
1 1 0
2 1 1
3 2 1
4 3 2
1
2
3
4
5
6
7
8
9
10
11
12
int jumpFloor(int number) {
if (number<=0) return 0;
if (number==1) return 1;
int a=1;
int b=0;
while (number > 0) {
a += b;
b = a-b;
number -= 1;
}
return a;
}