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多线程实例教程
Sep 06 Python
一些Python中的二维数组的操作方法
May 02 Python
Swift 3.0在集合类数据结构上的一些新变化总结
Jul 11 Python
20个常用Python运维库和模块
Feb 12 Python
Python管理Windows服务小脚本
Mar 12 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
Oct 09 Python
python3.6利用pyinstall打包py为exe的操作实例
Oct 31 Python
python数据预处理之数据标准化的几种处理方式
Jul 17 Python
通过自学python能找到工作吗
Jun 21 Python
Python Excel vlookup函数实现过程解析
Jun 22 Python
详解用selenium来下载小姐姐图片并保存
Jan 26 Python
Python的Tqdm模块实现进度条配置
Feb 24 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
PHP开发需要注意的安全问题
2010/09/01 PHP
php判断页面是否是微信打开的示例(微信打开网页)
2014/04/25 PHP
smarty内置函数config_load用法实例
2015/01/22 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
js解决select下拉选不中问题
2014/10/14 Javascript
window.onerror()的用法与实例分析
2016/01/27 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
jQuery.Callbacks()回调函数队列用法详解
2016/06/14 Javascript
总结JavaScript的正则与其他语言的不同之处
2016/08/25 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
基于javascript实现放大镜特效
2020/12/03 Javascript
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
Django logging配置及使用详解
2019/07/23 Python
Django 大文件下载实现过程解析
2019/08/01 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
python读取ini配置文件过程示范
2019/12/23 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
Python新手学习raise用法
2020/06/03 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
毕业生精彩的自我评价分享
2013/10/06 职场文书
报社实习生自荐信
2014/01/24 职场文书
优秀党员获奖感言
2014/02/18 职场文书
设备动力科岗位职责范本
2014/02/23 职场文书
新教师个人总结
2015/02/06 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript