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编程中实现迭代器的一些技巧小结
Jun 21 Python
python模块之time模块(实例讲解)
Sep 13 Python
使用Python的turtle模块画图的方法
Nov 15 Python
Python实现打印螺旋矩阵功能的方法
Nov 21 Python
python中reader的next用法
Jul 24 Python
flask中过滤器的使用详解
Aug 01 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
Python实现时间序列可视化的方法
Aug 06 Python
Python使用turtle库绘制小猪佩奇(实例代码)
Jan 16 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
Python基于Faker假数据构造库
Nov 30 Python
python实现学员管理系统(面向对象版)
Jun 05 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 memcache扩展的三种安装方法
2009/04/26 PHP
php面向对象全攻略 (七) 继承性
2009/09/30 PHP
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
php中配置文件操作 如config.php文件的读取修改等操作
2012/07/07 PHP
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
PHP数据类型的总结分析
2013/06/13 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
2013/06/25 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
php实现QQ小程序发送模板消息功能
2019/09/18 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
js直接编辑当前cookie的脚本
2008/09/14 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
JavaScript仿网易选项卡制作代码
2016/10/06 Javascript
javascript ES6中箭头函数注意细节小结
2017/02/17 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
Vue 理解之白话 getter/setter详解
2019/04/16 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
python 输出上个月的月末日期实例
2018/04/11 Python
python取均匀不重复的随机数方式
2019/11/27 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
党员承诺书格式
2014/05/21 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
css3实现背景图片半透明内容不透明的方法示例
2021/04/13 HTML / CSS
Go语言中的UTF-8实现
2021/04/26 Golang
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis