题目
代码
执行用时:36 ms, 在所有 Python3 提交中击败了61.09% 的用户
内存消耗:14.8 MB, 在所有 Python3 提交中击败了93.44% 的用户
通过测试用例:31 / 31
class Solution:
def fib(self, n: int) -> int:
if n<=1:
return n
a,b=0,1
while n:
n-=1
a,b=b,a+b
return a
【方法2】公式法
执行用时:36 ms, 在所有 Python3 提交中击败了61.09% 的用户
内存消耗:15 MB, 在所有 Python3 提交中击败了30.47% 的用户
通过测试用例:31 / 31
class Solution:
def fib(self, n: int) -> int:
sqrt5 = 5**0.5
fibN = ((1 + sqrt5) / 2) ** n - ((1 - sqrt5) / 2) ** n
return round(fibN / sqrt5)
【方法3】递归法
执行用时:640 ms, 在所有 Python3 提交中击败了12.90% 的用户
内存消耗:14.8 MB, 在所有 Python3 提交中击败了95.04% 的用户
通过测试用例:31 / 31
class Solution:
def fib(self, n: int) -> int:
if n<=1:
return n
a=self.fib(n-1)
b=self.fib(n-2)
return a+b
【方法4】带备忘录的递归
执行用时:1820 ms, 在所有 Python3 提交中击败了5.06% 的用户
内存消耗:15 MB, 在所有 Python3 提交中击败了15.74% 的用户
通过测试用例:31 / 31
class Solution:
def deal(self,meno,n):
if n<=1:
return n
if n in meno:
return meno[n]
a=self.fib(n-1)
meno[n-1]=a
b=self.fib(n-2)
meno[n-2]=b
return a+b
def fib(self, n: int) -> int:
return self.deal(dict(),n)
【方法5】快速幂
后期补充。。。占坑