我是靠谱客的博主 自然硬币,最近开发中收集的这篇文章主要介绍【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
        

解析

在这里插入图片描述
这个装饰器实现了备忘的功能,是一项优化技术,把耗时的函数的结果保存起来,避免传入相同的参数时重复计算。lru 是(least recently used)的缩写,即最近最少使用原则。表明缓存不会无限制增长,一段时间不用的缓存条目会被扔掉。

最后

以上就是自然硬币为你收集整理的【Python】剑指 Offer 10- I. 斐波那契数列 // 剑指 Offer 10- II. 青蛙跳台阶问题的全部内容,希望文章能够帮你解决【Python】剑指 Offer 10- I. 斐波那契数列 // 剑指 Offer 10- II. 青蛙跳台阶问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部