[剑指offer]10.斐波那契数列+青蛙跳台阶问题
10- I. 斐波那契数列
方法一 Top-down

用递归实现
def fibonacci(n):
    if n <= 0:
        return 0
    if n == 1:
        return 1
    return fibonacci(n-1) + fibonacci(n-2)
不过这种方法在leetcode上超时了。
方法二 Bottom-up
用循环实现
class Solution:
    def fib(self, n: int) -> int:
        if n <= 0:
            return 0
        if n == 1:
            return 1
        tmp = 0
        fibNMinusOne = 1
        fibNMinusTwo = 0
        for i in range(2, n+1):
            tmp = fibNMinusOne + fibNMinusTwo
            fibNMinusTwo = fibNMinusOne
            fibNMinusOne = tmp
        return tmp
面试题10- II. 青蛙跳台阶问题
思路:把它转化为一个Fibonacci问题。
设青蛙跳n级台阶,共numWays(n)种方法;
如果青蛙第一次跳一级台阶,则剩下的n-1级台阶共numWays(n-1)种跳法;
如果青蛙第一次跳两级台阶,剩下的n-2级台阶共numWays(n-2)种跳法;
故numWays(n) = numWays(n-2) + numWays(n-1),即为递推公式。
代码
class Solution:
    def numWays(self, n: int) -> int:
        res = [1, 1, 2]
        if n <= 2:
            return res[n]
        fibN = 0
        fibNMinusTwo = 1
        fibNMinusOne = 2
        for i in range(3, n+1):
            fibN = fibNMinusOne + fibNMinusTwo
            fibNMinusTwo = fibNMinusOne
            fibNMinusOne = fibN
        return fibN%1000000007
[剑指offer]10.斐波那契数列+青蛙跳台阶问题的更多相关文章
- 【剑指offer】斐波那契序列与跳台阶
		转载请注明出处:http://blog.csdn.net/ns_code/article/details/25337983 剑指offer上的第9题,简单题,在九度OJ上測试通过. 主要注意下面几点: ... 
- 《剑指offer》斐波那契数列
		本题来自<剑指offer> 斐波那契数列 矩阵覆盖 题目一: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 思路: ... 
- 剑指offer:斐波那契数列
		目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n< ... 
- 力扣 - 剑指 Offer 10- I. 斐波那契数列
		题目 剑指 Offer 10- I. 斐波那契数列 思路1(递归 / 自顶向下) 这题是很常见的一道入门递归题,可以采用自顶向下的递归方法,比如我们要求第n个位置的值,根据斐波那契数列的定义fib(n ... 
- 【Java】 剑指offer(9) 斐波那契数列及青蛙跳台阶问题
		本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项 ... 
- Go语言实现:【剑指offer】斐波那契数列
		该题目来源于牛客网<剑指offer>专题. 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0) n<=39 Go语言实现: 递归: ... 
- 剑指offer三: 斐波拉契数列
		斐波拉契数列是指这样一个数列: F(1)=1; F(2)=1; F(n)=F(n-1)+F(n); public class Solution { public int Fibonacci(int n ... 
- 剑指Offer 7. 斐波那契数列 (递归)
		题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 题目地址 https://www.nowcoder.com/prac ... 
- [剑指offer] 7. 斐波那契数列 (递归 时间复杂度)
		简介: 杨辉三角每条斜线上的数之和就构成斐波那契数列. 思路: 参考文章:https://mp.weixin.qq.com/s?src=11×tamp=1551321876& ... 
随机推荐
- mac 下openOffice服务的安装
			1.安装准备 安装 Homebrew 及 Homebrew-Cask Homebrew 是一个Mac上的包管理工具.使用Homebrew可以很轻松的安装缺少的依赖. Homebrew-Cask是建立在 ... 
- 支持向量机 SVM - Wenjing
			概念 将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面.在分开数据的超平面的两边建有两个互相平行的超平面,分隔超平面使两个平行超平面的距离最大化.假定平行超平面间的距离或差距越大, ... 
- linux find命令格式及find命令详解
			本文详细介绍了linux find命令格式及find命令案例,希望对您的学习有所帮助.1.find命令的一般形式为:find pathname -options [-print -exec -ok . ... 
- ES常见问题整理
			1.集群状态red.yellow处理方法 1.red表示主分片数据不完整,通常时由于某个索引的主分片为分片unassigned,找出这个分片未分配的原因,解决即可: curl -XGET http:/ ... 
- 开始使用Github
			Gather ye rosebuds while ye may 我自己也是刚开始使用github没几天,写得不好我就写自己常用的吧 2015年9月20日下午3:19更新知乎上这个答案写得好多了 
- JQUERY的基本使用方法
			#准备工作 在官网下载JQUERY库 将库在你需要的网页上引用 123 <head><script src="jquery.js"></script& ... 
- LeetCode~941.有效的山脉数组
			941.有效的山脉数组 给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false. 让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组: A.length > ... 
- Flash之后是不是该IE浏览器了
			Flash死亡,Adobe推荐大家拥抱HTML5. 其实Flash本身也是支持手机端的. 一.Flash宣告死亡 Adoebe官方网站发布了公告,2020年12月30日起终止支援Flash.目前Chr ... 
- python爬虫之字体反爬
			一.什么是字体反爬? 字体反爬就是将关键性数据对应于其他Unicode编码,浏览器使用该页面自带的字体文件加载关键性数据,正常显示,而当我们将数据进行复制粘贴.爬取操作时,使用的还是标准的Unicod ... 
- Python开发(一):Python介绍与基础知识
			Python开发(一):Python介绍与基础知识 本次内容 一:Python介绍: 二:Python是一门什么语言 三:Python:安装 四:第一个程序 “Hello world” 五:Pytho ... 
