• 青蛙跳台阶问题


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

    问题:

    一只青蛙要跳上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
    不论你在什么时候开始,重要的是开始之后就不要停止。 不论你在什么时候结束,重要的是结束之后就不要悔恨。
  • 相关阅读:
    数据流控制
    转:简单的Mysql主从复制设置
    转:CentOS---网络配置详解
    Linux-vim学习入门
    Linux图形界面与字符界面切换
    转:MySQL表名不区分大小写
    CentOS6.5_x86安装Mysql5.5.49
    Linux的环境变量设置和查看
    Linux防火墙的关闭和开启
    Linux command not found 问题解释
  • 原文地址:https://www.cnblogs.com/yunhgu/p/14458649.html
Copyright © 2020-2023  润新知