题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
分析:
n为1时,有1种跳法;n为2时有2种跳法;n为3时,可以从第1级台阶直接跳,也可以从第2级台阶直接跳,而跳到第1级和跳到第二级各有1和2种方法,所以n为3时有3种跳法。由此可知,有n级台阶时,跳法等于到n-1和n-2台阶的跳法之和,即,求法和斐波那契数列类似。递归求法如下:
class Solution {
public:
int JumpFloor(int target) {
if(target < 3)
return target;
return JumpFloor(target-1) + JumpFloor(target-2);
}
};
非递归求法如下:
class Solution {
public:
int jumpFloor(int number) {
if(number < 3)
return number;
int n1 = 1, n2 = 2, res = 0;
for(int i = 3; i <= number; i++)
{
res = n1 + n2;
n1 = n2;
n2 = res;
}
return res;
}
};