Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法


Posted in Python onMay 19, 2018

前言

跳台阶、变态跳台阶、矩形覆盖其实都和斐波那契数列是一类问题,文中通过示例代码介绍的非常详细,下面话不多说了,来一起看看详细的介绍吧。

跳台阶

问题描述:

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

分析:

初始值很容易得到,当n > 2时,跳上n级台阶最后一步无外乎两种情况,从第n-1级跳一级跳上来,或是从第n-2级跳2级跳上来,因此很容易得到如下递归公式。

F(0)= 0
F(1)= 1
F(2)= 2
F(n)= F(n-1)+ F(n-2)(n > 2)

代码:

def jump_floor(number):
 if number <= 2:
  return number
 prev, curr = 1, 2
 for _ in range(3, number+1):
  prev, curr = curr, prev+curr
 return curr

变态跳台阶

问题描述:

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

分析:

相比上一个跳台阶,这次可以从任意台阶跳上第n级台阶,也可以直接跳上第n级。因此其递归公式为各个台阶之和再加上直接跳上去的一种情况。

F(0)= 0
F(1)= 1
F(2)= 2
F(n)= F(n-1)+ F(n-2)+ … + F(2)+ F(1)+ 1 = 2 **(n-1)

代码:

def jump_floor(number):
 if number == 0:
  return 0
 return 2**(number-1)

矩形覆盖

问题描述:

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

分析:

仔细分析这个问题实际上就是普通的跳台阶问题。

F(0)= 0
F(1)= 1
F(2)= 2
F(n)= F(n-1)+ F(n-2)(n > 2)

代码:

def jump_floor(number):
 if number <= 2:
  return number
 prev, curr = 1, 2
 for _ in range(3, number+1):
  prev, curr = curr, prev+curr
 return curr

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python多线程用法实例详解
Jan 15 Python
Python中实现对Timestamp和Datetime及UTC时间之间的转换
Apr 08 Python
详解Python中__str__和__repr__方法的区别
Apr 17 Python
Python使用bs4获取58同城城市分类的方法
Jul 08 Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
Python常用的json标准库
Feb 19 Python
python实现简单加密解密机制
Mar 19 Python
Python qqbot 实现qq机器人的示例代码
Jul 11 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
Python面向对象程序设计之继承、多态原理与用法详解
Mar 23 Python
浅谈keras 的抽象后端(from keras import backend as K)
Jun 16 Python
Python利用公共键如何对字典列表进行排序详解
May 19 #Python
Python中一些不为人知的基础技巧总结
May 19 #Python
Python + selenium自动化环境搭建的完整步骤
May 19 #Python
pandas中去除指定字符的实例
May 18 #Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 #Python
对pandas replace函数的使用方法小结
May 18 #Python
基于DataFrame筛选数据与loc的用法详解
May 18 #Python
You might like
ASP知识讲座四
2006/10/09 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
List Installed Software Features
2007/06/11 Javascript
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
jQuery中ajax的load()与post()方法实例详解
2016/01/05 Javascript
jQuery实现的分子运动小球碰撞效果
2016/01/27 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
vue使用自定义指令实现拖拽
2021/01/29 Javascript
使用Python的Django框架实现事务交易管理的教程
2015/04/20 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
《夜晚的实验》教学反思
2014/02/19 职场文书
气象学专业个人求职信
2014/03/15 职场文书
祖国在我心中演讲稿300字
2014/05/04 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
法人身份证明书
2014/10/08 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
地方课程教学计划
2015/01/19 职场文书