题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
与斐波那契数列类似
只需要证明f(n)存在,且在n>=3的情况下:f(n) = f(n-1) + f(n-2)
n=1:1 -----------------------------------------------1种;
n=2:11,2 -----------------------------------------2种;
n=3:111,12,21,-----------------------------3种;
n=4:1111,121,22,211,112--------------5种;
…
n=k:f(n) = f(n-1) + f(n-2)种;
然后试着倒退:
当有n级台阶时:
若青蛙跳1级,则剩下n-1级台阶,即有f(n-1)种;
若青蛙跳2级,则剩下n-2级台阶,即有f(n-2)种;
故f(n) = f(n-1) + f(n-2);
此时基本与斐波那契数列的规律相同
class Solution {
public:
int jumpFloor(int number) {
int pre = 1;
int sum = 2;
if(number <=1){
return 1;
}
if(number == 2){
return 2;
}
for(int i = 3;i <=number;i++){
sum = sum + pre;
pre = sum - pre;
}
return sum;
}
};