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程序中操作文件之flush()方法的使用教程
May 24 Python
python中的全局变量用法分析
Jun 09 Python
用Python抢过年的火车票附源码
Dec 07 Python
Python之日期与时间处理模块(date和datetime)
Feb 16 Python
Python 实现链表实例代码
Apr 07 Python
python 实现敏感词过滤的方法
Jan 21 Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 Python
python归并排序算法过程实例讲解
Nov 04 Python
Python中return函数返回值实例用法
Nov 19 Python
python使用dlib进行人脸检测和关键点的示例
Dec 05 Python
python抢购软件/插件/脚本附完整源码
Mar 04 Python
用Python提取PDF表格的方法
Apr 11 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
动易数据转成dedecms的php程序
2007/04/07 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
php简单统计字符串单词数量的方法
2015/06/19 PHP
jquery 实现窗口的最大化不论什么情况
2013/09/03 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
2016/09/08 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
angular分页指令操作
2017/01/09 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
基于vue实现分页效果
2017/11/06 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
解决vue attr取不到属性值的问题
2018/09/18 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
vue实现菜单切换功能
2019/05/08 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
Javascript实现简易天数计算器
2020/05/18 Javascript
八种Vue组件间通讯方式合集(推荐)
2020/08/18 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
[01:16:12]完美世界DOTA2联赛PWL S2 FTD vs Inki 第一场 11.21
2020/11/23 DOTA
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
FFrpc python客户端lib使用解析
2019/08/24 Python
python如何实时获取tcpdump输出
2020/09/16 Python
商场总经理岗位职责
2014/02/03 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
关于安全的演讲稿
2014/05/09 职场文书
疾病捐款倡议书
2014/05/13 职场文书
商铺门前三包责任书
2014/07/25 职场文书
研讨会致辞
2015/07/31 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
远程教育集中轮训基层干部培训班学习心得体会
2016/01/09 职场文书