"首先声明本测试代码由于运行时间并未能通过,但在本机上测试通过"
解题思路
由于每次跳跃只能跳一个台阶或者两个台阶,所以我们可以跟踪跳2个台阶的次数来求解相应问题,其实这个问题可以理解为台阶数n可以有多少种不同有1,2相加的方案。我们可以来看具体的案例
案例一 台阶数为3
由于是由1和2相加,所以3最多只能由一个2和一个1组成,如果是两个2则大于3,下面就有第一种情况1,2(此种情况有两种排列方案1,2和2,1),如果此时将2拆分成两个1,则又有一种方案1,1,1,由此我们可以得出只要确定每种方案中2的个数在求相应的排列组合即可得到相应的结果。
所以我们的总的解题思路就是求出n中最大拥有的2的个数,然后不断将2拆分成1,1,再分别求排列组合

class Solution:
    def jumpFloor(self, number):
        # write code here
        if number<=1:
            return 1
        number_2=number//2#n最多可以由多少个2组成
        number_index=0#1和2总的个数
        if number%2==0:
            number_index=number_2
        else:
            number_index=number_2+1
        sum=0
        index=0
        for i in range(number_2,-1,-1):
            sum+=self.SortLine(number_index+index,i)
            index+=1#每次拆分后1和2的总个数增加一个
        return sum
    def SortLine(self,m,n):#求相应的排列组合,m个元素中有n个2
        if m==n or n==0:
            return 1
        sum=1
        sum0=1
        for i in range(m,m-n,-1):
            sum*=i
        for i in range(1,n+1):
            sum0*=i
        return sum/sum0