题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路:找关系,递归
n是1时,有1种跳法
n是2时,有2种跳法
当n无穷大时,不论哪种跳法,最后一跳,要么是跳2步,要么是1步,所以跳法总数是由 最后一跳为2步 和 最后一跳为1步 的跳法数组成
假设有f(n)种跳法,那么f(n) = f(n-1) + f(n-2)
这就是个斐波那契数列
由尾递归和迭代两种写法
迭代的话重复步骤少,运行时间短一点
递归:
class Solution {
public:
int jumpFloor(int number) {
if(number == 0) return 0;
else if(number == 1) return 1;
else if(number == 2) return 2;
else return jumpFloor(number-1) + jumpFloor(number-2);
}
};
迭代:
class Solution {
public:
int jumpFloor(int number) {
if(number == 0) return 0;
else if(number == 1) return 1;
else if(number == 2) return 2;
int res = 0;
int n1 = 2;//记录最后一跳是1步的跳法总数
int n2 = 1;//记录最后一跳是2步的跳法总数
for(int i = 2;i < number;i++){
res = n1 + n2;
n2 = n1;
n1 = res;
}
return res;
}
};