跳台阶

跳台阶

http://www.nowcoder.com/questionTerminal/8c82a5b80378478f9484d87d1c5f12a4

"首先声明本测试代码由于运行时间并未能通过,但在本机上测试通过"
解题思路
由于每次跳跃只能跳一个台阶或者两个台阶,所以我们可以跟踪跳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
全部评论

相关推荐

头像
11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务