概述
剑指 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. 青蛙跳台阶问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复