数据结构与算法-斐波那契相关(一):剑指offer-斐波那契数列

剑指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

递归(时间复杂度大):当 n = k ( k > 1 ) n=k(k>1) 时, f ( k ) = f ( k 1 ) + f ( k 2 ) f(k)=f(k-1)+f(k-2)

n = 1 , f ( 1 ) = 1 ; n = 0 , f ( 0 ) = 0 n=1,f(1)=1;n=0,f(0)=0

记录前面的结果:

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
发布了49 篇原创文章 · 获赞 2 · 访问量 1821

猜你喜欢

转载自blog.csdn.net/liuluTL/article/details/105015755
今日推荐