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