斐波那契数

来源:互联网 发布:龙年限定琴女淘宝价格 编辑:程序博客网 时间:2024/05/18 03:20

牛客网 《剑指offer》

时间限制:1秒 空间限制:32768K 热度指数:199742

解题思路

一:
如果像这样,将会有大量的计算是重复的,时空复杂度过大
这里写图片描述

这里写图片描述

二:
可以考虑将计算过的结果缓存起来,如果发现一个 n 已经计算过了,就不再重复计算

三:
非递归解法,即从下往上算
首先根据 f(0)f(1) 算出 f(2),再根据f(1)f(2)算出f(3)。。。以此类推

python 2.7
递归

# -*- coding:utf-8 -*-class Solution:    def __init__(self):        self.dic = {0:0, 1:1}    def Fibonacci(self, n):        # write code here        if n < 0:            return None        if self.dic.has_key(n):            return self.dic[n]        m1 = self.getF(n - 1)        if not m1:            m1 = self.Fibonacci(n - 1)            self.dic[n - 1] = m1        m2 = self.getF(n - 2)        if not m2:            m2 = self.Fibonacci(n - 2)            self.dic[n - 2] = m2        return m1 + m2     def getF(self, n):        if self.dic.has_key(n):            return self.dic[n]        return None
运行时间:28ms占用内存:5768k

https://github.com/Jack-Lee-Hiter/AlgorithmsByPython/blob/master/Target%20Offer/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97.py

'''题目一:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39题目二:一只青蛙一次可以跳上一级台阶,也可以跳上两级台阶,问该青蛙跳上一个 n 级台阶有多少种跳法?题目三:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解法参见牛客网讨论:https://www.nowcoder.com/questionTerminal/22243d016f6b47f2a6928b4313c85387'''# -*- coding:utf-8 -*-class Solution:    def Fibonacci(self, n):        tempArray = [0, 1]        if n >= 2:            for i in range(2, n+1):                tempArray[i%2] = tempArray[0] + tempArray[1]        return tempArray[n%2]    # 青蛙跳台阶, 每次可以跳1级或2级    def jumpFloor(self, number):        # write code here        tempArray = [1, 2]        if number >= 3:            for i in range(3, number + 1):                tempArray[(i + 1) % 2] = tempArray[0] + tempArray[1]        return tempArray[(number + 1) % 2]    def jumpFloorII(self, number):        ans = 1        if number >= 2:            for i in range(number-1):                ans = ans * 2        return anstest = Solution()print(test.Fibonacci(100))print(test.jumpFloor(3))print(test.jumpFloorII(2))
原创粉丝点击