题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
题目分析:对于这样的题目,我们不妨先举一个实例进行分析,例如n=5时,无非就是下面三种跳法,只是顺序可变,然后就把问题转变为排列组合的问题了。
跳法一:0个2,5个1
跳法二:1个2,3个1
跳法三:2个2,1个1
相同元素的排列组合问题,我们可以采取隔板法进行分析,例如:
对于跳法一:全是1,肯定只有一种排列方案;
对于跳法二:3个1,1个2。我们可以先把3个1排成一排,然后在1的间隙中插入2,总共有4个间隙,所以为C41,故共有四种排列方案;
对于跳法三:2个2,1个1。我们可以先把2个2拍成一排,然后在2的间隙中插入1,总共有3个间隙,所以为C31,故共有3中排列方案;
综上所述:共有1+4+3=8种排列方案。
这样我们就掌握了分析一个具体台阶数跳法的方法了,现在我们整体来分析一下,F(0)=0、F(1)=2、F(2)=2、F(3)=3、F(4)=5、F(5)=8、F(6)=13、…。从节选的一段我们可以得出其中的规律:斐波那契数列
所以编程时就直接按斐波那契数列的递归方案编就可以了。
具体代码:
class Solution {
public:
int jumpFloor(int number) {
if(number <= 2)
return number;
else
return jumpFloor(number-1)+jumpFloor(number-2);
}
};