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中处理字符串之endswith()方法的使用简介
May 18 Python
实例讲解Python设计模式编程之工厂方法模式的使用
Mar 02 Python
shelve  用来持久化任意的Python对象实例代码
Oct 12 Python
详谈Python高阶函数与函数装饰器(推荐)
Sep 30 Python
对python的unittest架构公共参数token提取方法详解
Dec 17 Python
python将txt等文件中的数据读为numpy数组的方法
Dec 22 Python
selenium+python自动化测试之页面元素定位
Jan 23 Python
Python中如何将一个类方法变为多个方法
Dec 30 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
解决Python Matplotlib绘图数据点位置错乱问题
May 16 Python
python 经纬度求两点距离、三点面积操作
Jun 03 Python
Python List remove()实例用法详解
Aug 02 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
用Php实现链结人气统计
2006/10/09 PHP
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
2020/08/10 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
详解Python中 sys.argv[]的用法简明解释
2017/12/20 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
应急处置方案
2014/06/16 职场文书
推广普通话标语
2014/06/27 职场文书
文明好少年事迹材料
2014/08/19 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
数学教师求职信范文
2015/03/20 职场文书
毕业实习单位意见
2015/06/04 职场文书
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python
Golang并发工具Singleflight
2022/05/06 Golang
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS