剑指offer(6)跳台阶

题目:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

一开始看到脑阔疼
有点没思路
后面想到排列组合…发现行得通
各位看官没有思路的现在也可以往排列组合这边想想

简单的说
问的是总共跳台阶的方式有几种
假设n个台阶
显然每次都跳一个台阶的话.就只有一种跳法
如果有一次跳了两个台阶的话,就有C N-1 1种跳法即(n-1)!/(n-2)!
如果有两次跳了两个台阶的话 就有C N-2 2种跳法 即(n-2)!/2!*(n-2-2)!
以此类推
OK
思路就是这样
各位自己动手实现下叭
今天是大寒呢…回了家还是很开心…在家里敲敲代码都神清气爽的
舒服

最后上代码,当然还是自己手码一遍印象会更深刻哦

class Solution:
    tempres=[]                          #用来存储各个数的阶乘,以备之后的排序选择使用
    def factorial(self,n):
        self.tempres.append(1)
        for i in range(1,n):
            jiecheng=self.tempres[i-1]*i            #计算阶乘
            self.tempres.append(jiecheng)
    def jumpFloor(self, number):
        self.factorial(100)
        sum=0
        sum+=1                          #全部只跳一个台阶,则只有一种跳法
        two_num=1                       #跳两个台阶的次数
        while(True):
            if(two_num*2>number):
                break
            if(two_num*2==number):      #如果number是偶数,正好等于的话,全跳2台阶,也是一种跳法
                sum+=1
                break
            else:                       #跳n次两台阶,其余皆跳一台阶,C n-two two
                solution_num=self.tempres[number-two_num]/((self.tempres[two_num])*(self.tempres[number-2*two_num]))
                sum+=solution_num
                two_num+=1
        return (int)(sum)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值