题解 | #斐波那契数列#

斐波那契数列

http://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3

# -*- coding:utf-8 -*-
class Solution:
    @staticmethod
    def multiMatrix(a,b):
        c =[[0 for i in range(len(b[0]))] for i in range(len(a))]
        for i in range(len(a)):
            for j in range(len(b[0])):
                for k in range(len(a[0])):
                    c[i][j] += a[i][k]*b[k][j]
        return c

    def matrixPower(self,temp,p):
        k = 0
        while p > 0:
            if  p%2 == 1:
                if k == 0:
                    result = temp
                    k = 1
                else:
                    result = self.multiMatrix(result,temp)
            temp = self.multiMatrix(temp,temp)
            p //= 2
        return(result[0][0]+result[0][1])
    def Fibonacci(self, n):
        # write code here
        if (n == 1) | (n == 2):
            return 1
        temp = [[1,1],[1,0]]
        return self.matrixPower(temp,(n-2))

全部评论
复杂度为n的算法: def Fibona(n): a,b,c,i = 1,1,1,1 while i <= n: if (i == 1) | (i == 2): a = 1 b = 1 else: c = b b += a a = c i += 1 return b
点赞 回复 分享
发布于 2021-10-22 17:12
递归 def Fibona(n): if (n == 1) | (n == 2): return 1 elif (n > 2): return Fibona(n-1) + Fibona(n-2)
点赞 回复 分享
发布于 2021-10-22 17:09
这个题我最开始用递归,发现超时,时间复杂度太高,后来在评论区看到,这个本质是数列,可以从f(1)计算到f(n),这种方法是可行的,但是最后我又在评论区看到更精彩的方法,理解后,自己写了一下,记录一下这个算法。之前写的两种方法也记录一下
点赞 回复 分享
发布于 2021-10-22 17:09
大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。 斐波那契数列是一个满足 fib(x)=\left\{ \begin{array}{rcl} 1 & {x=1,2}\\ fib(x-1)+fib(x-2) &{x>2}\\ \end{array} \right.fib(x)={ 1 fib(x−1)+fib(x−2) ​ x=1,2 x>2 ​ 的数列 数据范围:1\leq n\leq 391≤n≤39
点赞 回复 分享
发布于 2021-10-22 17:04

相关推荐

01-04 07:53
门头沟学院 C++
心愿便利贴:工作了以后回头再看待这个问题,从客观的视角来讲是因为每个人对自己的要求不同,学习好的人对自己的要求很高,所以觉得考不好就天塌了,认为自己学习好并且值得一份好工作的人也是一样,找不到符合自己预期的工作肯定也会觉得是侮辱,牛客上有很多名校大学生,肯定会存在这种好学生心态啊,“做题区”从来都不是贬义词,这是大部分普通人赖以生存的路径,这个有什么好嘲讽的,有“好学生心态”没有错,但是不要给自己太大的压力了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务