斐波那契数
来源:互联网 发布:龙年限定琴女淘宝价格 编辑:程序博客网 时间: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))
阅读全文
0 0
- 斐波那契数
- 斐波那契数
- 斐波那契数
- 斐波那契数
- 斐波那契数
- 斐波那契数
- 斐波那契数
- 斐波那契数
- 斐波那契数
- 斐波那契数
- 斐波那契数
- 斐波那契数
- 斐波那契数
- 斐波那契数
- 斐波那契数
- 斐波那契数
- 斐波那契数
- 斐波那契数
- swoole 同步task
- Android控件介绍及用法
- 梯度下降(Gradient Descent)
- OpenCV编程->双目标定(一)
- SQL Exercises/Pieces and providers
- 斐波那契数
- HDOJ1513 LCS水题
- shell
- JavaScript脚本——简单运算
- Akka和actor的相生相恋
- 时间线MindMap里程碑的使用方法
- 监督学习与非监督学习
- Android EditText弹出软键盘实现页面标题头不动,软键盘弹出在编辑框下面
- javaGUI知识(一)