【Python】剑指 Offer 10- I. 斐波那契数列 // 剑指 Offer 10- II. 青蛙跳台阶问题

剑指 Offer 10- I. 斐波那契数列

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:

F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:
输入:n = 2
输出:1

示例 2:
输入:n = 5
输出:5

解析

class Solution:
    def fib(self, n: int) -> int:
        a,b = 0,1
        for i in range(n):
            a,b = a+b,a
        return a%1000000007

剑指 Offer 10- II. 青蛙跳台阶问题

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2
输出:2
示例 2:

输入:n = 7
输出:21
示例 3:

输入:n = 0
输出:1


class Solution:
    @lru_cache
    def numWays(self, n: int) -> int:
        if n==0 or n==1:
            return 1
        return (self.numWays(n-1) + self.numWays(n-2)) % 1000000007
        
***********************************************************************************

class Solution:
    def numWays(self, n: int) -> int:
        a, b = 1, 1
        for _ in range(n):
            a, b = b, a + b
        return a % 1000000007
        

解析

【Python】剑指 Offer 10- I. 斐波那契数列 // 剑指 Offer 10- II. 青蛙跳台阶问题_第1张图片
这个装饰器实现了备忘的功能,是一项优化技术,把耗时的函数的结果保存起来,避免传入相同的参数时重复计算。lru 是(least recently used)的缩写,即最近最少使用原则。表明缓存不会无限制增长,一段时间不用的缓存条目会被扔掉。

你可能感兴趣的:(python)