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打开url并按指定块读取网页内容的方法
Apr 29 Python
Python中操作符重载用法分析
Apr 29 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
Jun 29 Python
DataFrame中去除指定列为空的行方法
Apr 08 Python
pandas系列之DataFrame 行列数据筛选实例
Apr 12 Python
Flask框架Flask-Principal基本用法实例分析
Jul 23 Python
python实现多进程代码示例
Oct 31 Python
详解PyTorch手写数字识别(MNIST数据集)
Aug 16 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
学会用Python实现滑雪小游戏,再也不用去北海道啦
May 20 Python
用python实现监控视频人数统计
May 21 Python
分享Python异步爬取知乎热榜
Apr 12 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/10/22 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
javascript call和apply方法
2008/11/24 Javascript
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
jQuery中extend函数详解
2015/07/13 Javascript
js实现鼠标点击左上角滑动菜单效果代码
2015/09/06 Javascript
javascript实现简单的on事件绑定
2016/08/23 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
2017/01/09 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
VueJS组件之间通过props交互及验证的方式
2017/09/04 Javascript
微信小程序 input输入及动态设置按钮的实现
2017/10/27 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
Vue动态面包屑功能的实现方法
2019/07/01 Javascript
微信小程序在ios下Echarts图表不能滑动的问题解决
2019/07/10 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
详解Python的Django框架中的中间件
2015/07/24 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
2016/01/20 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
python数据预处理 :数据抽样解析
2020/02/24 Python
Keras实现DenseNet结构操作
2020/07/06 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
全球性的在线购物网站:Zapals
2017/03/22 全球购物
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
善意的谎言事例
2014/02/15 职场文书
历史专业大学生职业生涯规划书
2014/03/13 职场文书
房屋买卖协议书范本
2014/04/10 职场文书
施工协议书范本
2014/04/22 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书
孙振耀退休感言
2015/08/01 职场文书
探究Mysql模糊查询是否区分大小写
2021/06/11 MySQL