博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer python】青蛙跳台阶
阅读量:2382 次
发布时间:2019-05-10

本文共 1745 字,大约阅读时间需要 5 分钟。

链接:

题目描述

一、一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

分析:

假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1);假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2);假定第一次跳的是3阶,那么剩下的是n-3个台阶,跳法是f(n-3)......假定第一次跳的是n-1阶,那么剩下的是1个台阶,跳法是f(1); 假定第一次跳的是n阶,那么剩下的是0个台阶,跳法是1种;

则:

f(n)=f(n-1)+f(n-2)+...+f(1)

f(n-1)=f(n-2)+...+f(1)

f(n)=2*f(n-1)

f(n)/f(n-1) = 2

f(n) = 2^(n-1)

#递归class Solution:    def jumpFloorII(self, number):        if number <= 0:            return 0        else:            return pow(2,number-1)

 

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

(1)递归

设青蛙跳上n级台阶有f(n)种方法,把这n种方法分为两大类,第一种最后一次跳了一级台阶,这类方法共有f(n-1)种,第二种最后一次跳了两级台阶,这种方法共有f(n-2)种,则得出递推公式f(n)=f(n-1)+f(n-2)

class Solution:    def climbStairs(self, n):        if n==1:            return 1        elif n==2:            return 2        else:            return self.climbStairs(n-1)+self.climbStairs(n-2)

(2)用循环来代替递归

class Solution:    def climbStairs(self, n):        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 cclass Solution:    def jumpFloor(self, number):        if number == 1:            return 1        elif number == 2:            return 2        f1 = 1        f2 = 2        for i in range(2,number-1):            f1,f2 = f2,f1+f2        return f1+f2

(3)建立简单数学模型,利用组合数公式

 

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

种方法

又因为 x在区间[0,n/2]内,所以我们只需要遍历这个区间内所有的整数,求出每个x对应的组合数累加到最后的结果即可

class Solution:    def climbStairs(self, n):        def fact(n):            result=1            for i in range(1,n+1):                result*=i            return result        total=0        for i in range(n/2+1):            total+=fact(i+n-2*i)/fact(i)/fact(n-2*i)        return total

 

 

 

转载地址:http://myfab.baihongyu.com/

你可能感兴趣的文章
java实现解压缩(Unzip)功能的实现
查看>>
java操作Access *.mdb数据库的实现
查看>>
jdbc连接数据库的代码片段
查看>>
X86汇编:debug命令详解
查看>>
flex(通过URLLoader)与后台jsp进行交互的例子,包括中文乱码的处理
查看>>
Flex HTTPService如何给后台传递参数
查看>>
Flex取得客户端的IP地址
查看>>
不vista下安装oracle10g(r2)注意事项
查看>>
文件列表输出到文件
查看>>
Ubuntu(804) SSH远程管理服务器安装配置
查看>>
android源码
查看>>
使用Hadoop的JAVA API远程访问HDFS
查看>>
Linux下任务调度服务crond使用
查看>>
ZeroMQ的订阅发布(publish-subscribe)模式
查看>>
使用redis存储全球IP库
查看>>
Snappy Java API简介
查看>>
C/C++中正则表达式库RE2的使用
查看>>
HBase Java API(1.2.X)使用简介
查看>>
Java:实现比较接口时,应该全面的进行各种情况的比较
查看>>
python3.*下用mob_pbxproj自动化修改配置
查看>>