大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。
斐波那契数列是一个满足 的数列
数据范围:
要求:空间复杂度 ,时间复杂度 ,本题也有时间复杂度 的解法
一个正整数n
输出一个正整数。
4
3
根据斐波那契数列的定义可知,fib(1)=1,fib(2)=1,fib(3)=fib(3-1)+fib(3-2)=2,fib(4)=fib(4-1)+fib(4-2)=3,所以答案为3。
1
1
2
1
class Solution: def Fibonacci(self , n: int) -> int: # write code here li = [0, 1, 1] if n>2: for i in range(n-2): num = li[-1] + li[-2] li.append(num) return li[-1]
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param n int整型 # @return int整型 # class Solution: fb = {1:1,2:1,3:2} def Fibonacci(self , n: int) -> int: # write code here if n==1&nbs***bsp;n==2: return self.fb[n] else: if n-1 not in self.fb:self.fb[n-1] = self.Fibonacci(n-1) if n-2 not in self.fb:self.fb[n-2] = self.Fibonacci(n-2) return self.fb[n-1]+self.fb[n-2]
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param n int整型 # @return int整型 # class Solution: def Fibonacci(self , n: int) -> int: # write code here if n<=2: return 1 else: # 递归 # return self.Fibonacci(n-1)+self.Fibonacci(n-2) start=[1,1] for _ in range(n-2): start.append(start[0]+start[1]) start.pop(0) return start[-1]
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param n int整型 # @return int整型 # class Solution: def Fibonacci(self , n: int) -> int: ## 通过递归来实现 # write code here if n == 0: return 0 if n == 1: return 1 if n == 2: return 1 return self.Fibonacci(n-1) + self.Fibonacci(n-2) class Solution: def Fibonacci(self, n: int) -> int: ## 通过动态规划来实现 dp = [0] * (n+1) dp[0] = 0 dp[1] = 1 dp[2] = 1 for i in range(2, n+1): dp[i] = dp[i - 1] + dp[i - 2] # print(dp) return dp[n]
class Solution: def Fibonacci(self , n: int) -> int: # write code here if n == 0: return 0 if n == 1: return 1 return self.Fibonacci(n-1)+self.Fibonacci[n-2]
class Solution: def __init__(self): self.memo=[0] def Fibonacci(self , n: int) -> int: # write code here if n == 0: return 0 if n == 1: self.memo.append(1) return 1 res =self.Fibonacci(n-1)+self.memo[n-2] self.memo.append(res) return res
不用递归,试试用列表直接算
class Solution: def __init__(self): self.L=[1,1] def Fibonacci(self , n: int) -> int: # write code here if n <=2: return 1 for i in range(n-2): self.L.append(self.L[-1]+self.L[-2]) return self.L[n-1]
如果可以调矩阵,感觉用矩阵也可以
import numpy as np class Solution: def __init__(self): self.m=np.mat('1 1;1 0') def Fibonacci(self , n: int) -> int: # write code here res = self.m**n return res[-1,0]