题解 | #斐波那契数列#
斐波那契数列
https://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3
class Solution:
fibo = [0] * 45
def Fibonacci(self , n: int) -> int:
if n <= 2:
return 1
if Solution.fibo[n] > 0:
return Solution.fibo[n]
else:
Solution.fibo[n] = self.Fibonacci(n-1) + self.Fibonacci(n-2)
return Solution.fibo[n]
常规思路:
递归,利用一个额外的列表(Solution.fibo)存储中间结果,避免重复计算。
这样空间复杂度和时间复杂度都是 O(n)
妙解:
参考大神题解——利用动态规划。
常规思路是从上到下递归,然后从下到上回溯;动态规划是直接从下到上
class Solution:
def Fibonacci(self , n: int) -> int:
a, b, c = 1, 1, 1
for i in range(3, n+1):
c = a + b
a = b
b = c
return c

