本文算法使用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》---跳台阶问题的更多相关文章

  1. (原)剑指offer跳台阶和矩形覆盖

    跳台阶 时间限制:1秒空间限制:32768K 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   分析同样为斐波那契数列边形这样的题肯定有公式 设 ...

  2. 剑指Offer 跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   解题思路: f(n)=f(n-1)+f(n-2); f(1)=1,f(2)=2;   AC代码 ...

  3. 剑指Offer——跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路分析 这个问题可以先从简单开始考虑,台阶只有1阶,只有1种跳法,台阶有2阶,有2种跳法:一种两 ...

  4. 用js刷剑指offer(跳台阶)

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 牛客网链接 思路 这一题和斐波那契数列思路完全一样. 假如青蛙从第n个 ...

  5. 剑指offer--39. 跳台阶

    时间限制:1秒 空间限制:32768K 热度指数:375795 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). cla ...

  6. 剑指Offer-8.跳台阶(C++/Java)

    题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 分析: 实际上就是斐波那契数列的一个应用,青蛙跳上n级台阶的跳法数等于跳 ...

  7. C#版 - 剑指offer 面试题9:斐波那契数列及其变形(跳台阶、矩形覆盖) 题解

    面试题9:斐波那契数列及其变形(跳台阶.矩形覆盖) 提交网址: http://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3?tp ...

  8. 《剑指offer》 跳台阶

    本题来自<剑指offer> 跳台阶 题目1: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路: 同上一篇. C ...

  9. 【Java】 剑指offer(9) 斐波那契数列及青蛙跳台阶问题

     本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项 ...

  10. 【剑指offer】09-2跳台阶,C++实现

    原创博文,转载请注明出处! # 本文是牛客网<剑指offer>刷题笔记 1.题目 # 一只青蛙一次可以跳1级台阶,也可以跳2级.求该青蛙跳n级的台阶总共有多少种跳法. 2.思路 # 跳0级 ...

随机推荐

  1. Linux中Elasticsearch集群部署

    1.下载安装包elasticsearch-6.3.1  安装包自己下载,网上很多 2.安装位置在cd /usr/local/elasticsearch/目录下 3.因为ES使用root权限运行会报错, ...

  2. React基本语法

    React 一.导入     0.局部安装 react 和 react-dom         npm install --save-dev react react-dom       1.react ...

  3. 2. HTML常用标签

    相信大家常常会打开浏览器搜索一些内容或者浏览一些网站,在浏览器的页面上会呈现很多内容,但是具体的形式无非就是图片.文字以及链接(可以点击进入另一个页面的特殊文字),其中文字承载着巨大的作用,传递着各种 ...

  4. 爬取豆瓣电影Top250

    1 import json import requests from requests.exceptions import RequestException import re import time ...

  5. window server IIS组建方法

    文章来自:二度云IIS(Internet Information Server,互联网信息服务)是一种Web(网页)服务组件,其中包括Web服务器.FTP服务器.NNTP服务器和SMTP服务器,分别用 ...

  6. 1.Python是什么

    前言   这里只是根据个人的理解而谈,庸俗浅薄,不是科学定义,也可以认为是假装自己理解啦,掩耳盗铃罢了.知无涯是多么的恐怖,哈哈 计算机语言   此处的语言不同于我们生活中所说的语言,因为生活中的语言 ...

  7. 反射vs简单工厂模式

    interface Computer { void printpc(); } class lenovo implements Computer { @Override public void prin ...

  8. 观看杨老师(杨旭)Asp.Net Core MVC入门教程记录

    观看杨老师(杨旭)Asp.Net Core MVC入门教程记录 ASP.NET Core MVC入门 Asp.Net Core启动和配置 Program类,Main方法 Startup类 依赖注入,I ...

  9. golang 多维哈希(map,hashmap)实践随笔

    有些场景使用多维哈希来存储数据,时间复杂度恒定,简单粗暴好用.这里记录一下. 如下是三维哈希的简单示意图,建议层数不要太多,否则时间久了,自己写的代码都不认识. 下图是三维哈希在内存的存储形式,has ...

  10. Caliburn.Micro 杰的入门教程3,事件和参数

    Caliburn.Micro 杰的入门教程1(翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译)Caliburn.Micro 杰的入门教程3, ...