某个问题有很多重叠子问题,适用动态规划。
贪心算法:局部选最优
动态规划:每一个状态一定是由上一个状态推导出来的。
1、迭代法
推荐!
class Solution:
def fib(self, n: int) -> int:
#F(0)=0,F(1)=1
if n <= 1:
return n
a=0
b=1
for i in range(2,n+1):
res=a+b
a=b
b=res
return b
2、递归法
时间复杂度:O(2^n)
空间复杂度:O(n),算上了递归的栈所占空间
class Solution:
def fib(self, n: int) -> int:
#2、递归法
if n <=1 :
return n
return self.fib(n-1)+self.fib(n-2)