《剑指offer》---跳台阶问题
本文算法使用python3实现
1. 问题1
1.1 题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
时间限制:1s;空间限制:32768K
1.2 思路描述:
(1)当 $ n=0 $ 时,返回0
(2)当 $ n=1 $ 时,只有一种跳法:跳1级台阶。
(3)当 $ n=2 $ 时,有两种跳法:(a) 跳1级再跳1级;(b) 直接跳2级。
(4)当 $ n=3 $ 时,我们只考虑最后一步的情况:(a)当最后一步只跳1级时, $ f(3)=f(3-1) $ ;(b)当最后一步直接跳2级时, $ f(3)=f(3-2) $ 。因此 $ f(3)=f(3-1) + f(3-2) $
(5)以此类推,当 $ n=N $ 时,只需考虑最后一步的情况即可:(a)当最后一步只跳1级时, $ f(N)=f(N-1) $ ;(b)当最后一步直接跳2级时, $ f(N)=f(N-2) $ 。因此 $ f(N)=f(N-1) + f(N-2) $
1.3 程序代码:
class Solution:
# def jumpFloor(self, number):
# '''递归:提交代码超时了'''
# if number in [0, 1, 2]:
# return number
# return self.jumpFloor(number-1)+self.jumpFloor(number-2)
def jumpFloor(self, number):
'''迭代'''
floor = []
for i in range(number+1):
if i in [0,1,2]:
floor.append(i)
continue
floor.append(floor[i-1]+floor[i-2])
return floor[-1]
2. 问题2
2.1 题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法
时间限制:1s;空间限制:32768K
2.2 思路描述:
(1)当 $ n=0 $ 时,返回0
(2)当 $ n=1 $ 时,只有一种跳法:跳1级台阶。
(3)当 $ n=2 $ 时,有两种跳法:(a) 跳1级再跳1级;(b) 直接跳2级。
(4)当 $ n=3 $ 时,我们只考虑最后一步的情况:(a)当最后一步只跳1级时, $ f(3)=f(3-1) $ ;(b)当最后一步直接跳2级时, $ f(3)=f(3-2) $ ;(c) 当最后一步直接跳3级时, $ f(3) = 1 $ 。因此 $ f(3)=f(3-1) + f(3-2) +1 $
(5)以此类推,当 $ n=N $ 时,只需考虑最后一步的情况即可:(a)当最后一步只跳1级时, $ f(N)=f(N-1) $ ;(b)当最后一步直接跳2级时, $ f(N)=f(N-2) $ ;(c) 当最后一步直接跳3级时, $ f(N) = f(N-3) $;...;(n)当最后一步直接跳N级时, $ f(N) = 1 $ 。因此 $ f(N) = f(N-1)+f(N-2)+f(N-3)+...+f(1)+1 $
2.3 程序代码:
class Solution:
def jumpFloorII(self, number):
'''迭代法,保存n次结果'''
floor = []
for i in range(number+1):
if i in [0,1,2]:
floor.append(i)
continue
step = 0
for k in range(i):
step += floor[k]
floor.append(step+1)
return floor[-1]
# def jumpFloorII(self, number):
# '''递归法:当number很大时,递归很深,会超时'''
# if number in [0,1,2]:
# return number
# res = 0
# for k in range(number):
# res += self.jumpFloorII(k)
# return res+1
3. 问题3
3.1 题目描述:
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
时间限制:1s;空间限制:32768K
3.2 思路描述:
(1)当 $ n=0 $ 时,返回0
(2)当 $ n=1 $ 时,只有一种覆盖方法,即竖着覆盖。

(3)当 $ n=2 $ 时,有两种覆盖方法:使用两个 $ 2\times1 $ 的小矩形,横着覆盖与竖着覆盖。

(4)当 $ n=3 $ 时,我们只考虑最后一步的情况:(a)当最后一步只需覆盖一个 $ 2\times1 $ 的矩形时时, $ f(3)=f(3-1) $ ;(b)当最后一步需覆盖一个 $ 2\times2 $ 的矩形时, $ f(3)=f(3-2) $
(5)以此类推,当 $ n=N $ 时,只需考虑最后一步的情况即可:(a)当最后一步只需覆盖一个 $ 2\times1 $ 的矩形时, $ f(N)=f(N-1) $ ;(b)当最后一步需覆盖一个 $ 2\times2 $ 的矩形时, $ f(N)=f(N-2) $ ;
3.3 程序代码:
class Solution:
def rectCover(self, number):
# 使用迭代法进行
if number == 0:
return 0
methods = []
for i in range(1,number+1):
if i in [1,2]:
methods.append(i)
else:
methods.append(methods[-1]+methods[-2])
return methods[-1]
《剑指offer》---跳台阶问题的更多相关文章
- (原)剑指offer跳台阶和矩形覆盖
跳台阶 时间限制:1秒空间限制:32768K 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析同样为斐波那契数列边形这样的题肯定有公式 设 ...
- 剑指Offer 跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路: f(n)=f(n-1)+f(n-2); f(1)=1,f(2)=2; AC代码 ...
- 剑指Offer——跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路分析 这个问题可以先从简单开始考虑,台阶只有1阶,只有1种跳法,台阶有2阶,有2种跳法:一种两 ...
- 用js刷剑指offer(跳台阶)
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 牛客网链接 思路 这一题和斐波那契数列思路完全一样. 假如青蛙从第n个 ...
- 剑指offer--39. 跳台阶
时间限制:1秒 空间限制:32768K 热度指数:375795 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). cla ...
- 剑指Offer-8.跳台阶(C++/Java)
题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 分析: 实际上就是斐波那契数列的一个应用,青蛙跳上n级台阶的跳法数等于跳 ...
- C#版 - 剑指offer 面试题9:斐波那契数列及其变形(跳台阶、矩形覆盖) 题解
面试题9:斐波那契数列及其变形(跳台阶.矩形覆盖) 提交网址: http://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3?tp ...
- 《剑指offer》 跳台阶
本题来自<剑指offer> 跳台阶 题目1: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路: 同上一篇. C ...
- 【Java】 剑指offer(9) 斐波那契数列及青蛙跳台阶问题
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项 ...
- 【剑指offer】09-2跳台阶,C++实现
原创博文,转载请注明出处! # 本文是牛客网<剑指offer>刷题笔记 1.题目 # 一只青蛙一次可以跳1级台阶,也可以跳2级.求该青蛙跳n级的台阶总共有多少种跳法. 2.思路 # 跳0级 ...
随机推荐
- @Component注解、@Service注解、@Repository注解、@Controller注解区别
--------------------------------------------------------------------------------------------------- ...
- Java中常见的比较
一.StringBuffer.StringBuilder.String 1) 都是 final 类, 都不允许被继承; 2) String 长度是不可变的, StringBuffer.StringBu ...
- ckeditor + ckfinder + oss存储
ckeditor 与 ckfinder 的整合方法 网上有很多,这里我也就不说了. (主要是以前整合的现在忘记咋弄的了0.0) 我这里整合后直接使用js代码 <script type=&quo ...
- 如何在 EXCEL 2003 插入的方框内打对勾,复选框
一个方框里带勾的符号是吧第一种:EXCEL里有个插入符号的功能知道吧,打开它在符号那栏(不是特殊符号那栏),下拉字体找到Wingdings字体,在下面的符号中就能找到框中带勾的符号 第二种:在界面点& ...
- day06-codes and exercise in class
# Author: Ghost # Email: jiaci.liu@gmail.com ''' 1-Review of last week 2-interface class, abstract c ...
- Python爬虫系列 - 初探:爬取新闻推送
Get发送内容格式 Get方式主要需要发送headers.url.cookies.params等部分的内容. t = requests.get(url, headers = header, param ...
- 十分钟搭建和使用ELK日志分析系统
前言 为满足研发可视化查看测试环境日志的目的,准备采用EK+filebeat实现日志可视化(ElasticSearch+Kibana+Filebeat).题目为“十分钟搭建和使用ELK日志分析系统”听 ...
- 汇编中resb这样的指令是什么意思?
转载下来,方便以后查看 原作网址:http://blog.csdn.net/m1j2t3/article/details/5681657 汇编中resb这样的指令是什么意思? 还有我在汇编程序中看到这 ...
- 从Github开源项目《云阅》所学到的知识
感谢开源,感谢大神,才让我们这些菜鸟成长! 附上云阅开源项目地址:点我吧. 1.轮播图的实现. 现在的APP基本都会实现这个功能吧,然后一直都找不到好的第三方库,能够满足各种需求.然而碰到了这个开源库 ...
- 开发Windows服务
在开发Windows服务时需要注意一点,如果在开发完成后,需要通过命令来进行安装的,那么在开发的时候,需要在服务类上面添加一个安装文件.如下图: 添加完成后,就 ...