码迷,mamicode.com
首页 > 其他好文 > 详细

[剑指offer]10.斐波那契数列+青蛙跳台阶问题

时间:2020-03-25 23:43:39      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:src   minus   pytho   com   mic   台阶   循环   递归   str   

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.斐波那契数列+青蛙跳台阶问题

标签:src   minus   pytho   com   mic   台阶   循环   递归   str   

原文地址:https://www.cnblogs.com/wyz-2020/p/12570978.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!