题目描述
解法
最开始想,这道题肯定用递归啊
class Solution:
def fib(self, n: int) -> int:
if n < 0:
return None
if n == 0:
return 0
if n == 1:
return 1
return self.fib(n-1) + self.fib(n-2)
但是不是这么简单的,这样会超时!!很多f(n)会被重复计算。所以来找一找规律。
f(n)其实只与f(n-1), f(n-2)有关,所以我们就考虑用a和b记录这两个值。
最开始的时候,n=0,a=0;n=1,b=1(红色标记),通过a+b就能得到f2=1。那么现在就是有a=f0,b=f1,f2。
这时我们要计算f3,实际上只需要f1和f2,f0可以抛弃了。所以将a变为f1,b变为f2(黄色标记)。
依次类推,不断更新a和b&