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实现二分法算法实例
Feb 02 Python
Windows和Linux下使用Python访问SqlServer的方法介绍
Mar 10 Python
python的dataframe和matrix的互换方法
Apr 11 Python
使用python存储网页上的图片实例
May 22 Python
Python面向对象之反射/自省机制实例分析
Aug 24 Python
python获取磁盘号下盘符步骤详解
Jun 19 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
Sep 06 Python
基于python的itchat库实现微信聊天机器人(推荐)
Oct 29 Python
django框架中间件原理与用法详解
Dec 10 Python
使用python实现多维数据降维操作
Feb 24 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 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编程之高级技巧——利用Mysql函数
2006/10/09 PHP
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
PHP PDOStatement::bindValue讲解
2019/01/30 PHP
js鼠标左右键 键盘值小结
2010/06/11 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
jquery实现华丽的可折角广告代码
2015/09/02 Javascript
浅析Ajax语法
2016/12/05 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
ionic3 懒加载
2017/08/16 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
Vue拖拽组件开发实例详解
2018/05/11 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
python使用post提交数据到远程url的方法
2015/04/29 Python
Python实现获取域名所用服务器的真实IP
2015/10/25 Python
Python切片知识解析
2016/03/06 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
Django框架教程之正则表达式URL误区详解
2018/01/28 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
xml有哪些解析技术?区别是什么
2016/04/26 面试题
药品采购员岗位职责
2014/02/08 职场文书
大学生求职计划书
2014/04/30 职场文书
个人承诺书格式
2014/06/03 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
实施意见格式范本
2015/06/05 职场文书
安全教育的主题班会
2015/08/13 职场文书