zoukankan      html  css  js  c++  java
  • 青蛙跳台阶问题

    ------------恢复内容开始------------

    问题:

    一只青蛙要跳上n层高的台阶,一次能跳一层,也可以调两层,问这只青蛙有多少种跳上这个台阶的方法?

    思路1:

    递归

    设青蛙跳上n级台阶有f(n)种方法,把这n种方法分为两大类,第一类最后一次跳了一层台阶,这类方法有f(n-1)种,第二类最后一次跳了两层台阶

    这类方法有发f(n-2)种,则得出递归公式f(n)=f(n-1)+f(n-2),并且f(1)=1,f(2)=2。

    这个方法代码简单,但是效率很低。

    代码实现:

    def climbStairs1(n:int)->int:
        if n==1 or n==2:
            return n
        else:
            return climbStairs1(n-1)+climbStairs1(n-2)

    思路2:

    用循环来代替递归

    def climbStairs2(n:int)->int:
        if n==1 or n==2:
            return n
        a=1;b=2;c=3
        for i in range(3,n+1):
            c=a+b
            a=b
            b=c
        return c

    思路3:

    建立数学模型,利用组合数公式

    设青蛙跳上n层台阶一共跳了z次,其中x次是一次跳了一层,y次是一次跳了两层,则有z=x+y , 2x+y=n,对于固定的x,利用组合可求出跳上n级台阶的方法共有

    多少种方法,因为x 取值范围为[0,n/2],因此只需要遍历这个区间的所有整数,求出每个x对应的组合数累加到最后的结果就可以了。

    def climbStairs3(n:int)->int:
        def fact(n):
            result=1
            for i in range(1,n+1):
                result*=i
            return result
        
        total=0
        for x in range(n//2+1):
            total+=fact(x+n-2*x)/fact(x)/fact(n-2*x)
        return total
    不论你在什么时候开始,重要的是开始之后就不要停止。 不论你在什么时候结束,重要的是结束之后就不要悔恨。
  • 相关阅读:
    判断微信浏览器
    文章迁移
    ECharts使用—折线图动态加载
    vue-cli入门
    gulp使用详解
    gulp使用入门
    Chrome扩展插件流程
    div界面元素生成图片
    xss攻击与防御
    bootstrap-table使用详解
  • 原文地址:https://www.cnblogs.com/yunhgu/p/14458649.html
Copyright © 2011-2022 走看看