文章目录
剑指offer-斐波那契数列
题目
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
解答
斐波那契数列:0、1、1、2、3、5、8…
n=0 num=0
n=1 num=1
n=2 num=1
n=3 num=2
递归(时间复杂度大):当 时,
记录前面的结果:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
0 | 1 | 1 | 2 | 3 | 5 | 8 | 13 |
a | b | a +b | |||||
a | b | a+b |
# -*- coding:utf-8 -*-
# 我就感觉这样写容易理解
class Solution:
def Fibonacci(self, n):
# write code here
# 边界条件
if n == 0:
return 0
if n == 1:
return 1
# 正常情况开走
a = 0
b = 1
for i in range(2, n+1):
ret = b + a
a = b
b = ret
return ret
# -*- coding:utf-8 -*-
# 这样写的短
class Solution:
# 时间复杂度 O(n)
def Fibonacci_1(self, n):
# write code here
a, b = 0, 1
for i in range(n):
a, b = b, a+b
return a
如果想要记录,可以这样写
def Fibonacci(n):
dp = [None for _ in range(n)]
dp[0] = 1
dp[1] = 1
for i in range(2, n):
dp[i] = dp[i-1]+dp[i-2]
return dp