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 中的列表解析和生成表达式
Mar 10 Python
Python基本数据类型详细介绍
Mar 11 Python
python实现的简单抽奖系统实例
May 22 Python
Python调用C++,通过Pybind11制作Python接口
Oct 16 Python
Python图像处理模块ndimage用法实例分析
Sep 05 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
Sep 07 Python
Python使用psutil获取进程信息的例子
Dec 17 Python
Python xlrd excel文件操作代码实例
Mar 10 Python
python 使用while循环输出*组成的菱形实例
Apr 12 Python
Python读入mnist二进制图像文件并显示实例
Apr 24 Python
使用Python内置模块与函数进行不同进制的数的转换
Apr 26 Python
python爬虫beautifulsoup解析html方法
Dec 07 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的ob_start来生成静态页面的方法分析
2011/03/09 PHP
Linux下PHP加速器APC的安装与配置笔记
2014/10/24 PHP
php is_executable判断给定文件名是否可执行实例
2016/09/26 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
推荐30个新鲜出炉的精美 jQuery 效果
2012/03/26 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
2017/04/13 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
python字符串str和字节数组相互转化方法
2017/03/18 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
Python try except else使用详解
2021/01/12 Python
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
不同浏览器创建XMLHttpRequest方法有什么不同
2014/11/17 面试题
人力资源专业推荐信
2013/11/29 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
辞职离别感言
2015/08/04 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL