【剑指 Offer】10-I.斐波那契数列
题目描述
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例
说明
Java
public class Solution10 {
public static void main(String[] args) {
Solution10 s = new Solution10();
Solution so = s.new Solution();
long t1 = System.currentTimeMillis();
System.out.println(so.fib(20));
long t2 = System.currentTimeMillis();
System.out.println(t2- t1);
System.out.println(so.fib2(20));
long t3 = System.currentTimeMillis();
System.out.println(t3- t2);
System.out.println(so.fib3(20));
long t4 = System.currentTimeMillis();
System.out.println(t4- t3);
}
/**
* 方法一:递归
* 把 f(n) 问题的计算拆分成 f(n-1) 和 f(n-2) 两个子问题的计算,并递归,以 f(0) 和 f(1) 为终止条件。
*
* 方法二:记忆化递归
* 在递归法的基础上,新建一个哈希表,用于在递归时存储 f(0) 至 f(n) 的数字值,重复遇到某数字则直接取用,避免了重复的递归计算。
*
* 方法三:动态规划
* 以斐波那契数列性质 f(n + 1) = f(n) + f(n - 1) 为转移方程。
*
*/
class Solution {
final int CONSTANT = 1000000007;
HashMap<Integer, Integer> map = new HashMap<>();
public int fib(int n) {
int first = 0, second = 1, sum;
for (int i = 0; i < n ; ++i) {
sum = (first + second) % CONSTANT;
first = second;
second = sum;
}
return first;
}
public int fib2(int n) {
if (n < 2) {
return n;
}
if (map.containsKey(n)) {
return map.get(n);
}
int first = fib2(n - 1) % CONSTANT;
map.put(n - 1, first);
int second = fib2(n - 2) % CONSTANT;
map.put(n - 2, second);
int res = (first + second) % CONSTANT;
map.put(n, res);
return res;
}
public int fib3(int n) {
if (n < 2) {
return n;
}
int first = (fib3(n - 1) % CONSTANT);
int second = (fib3(n - 2) % CONSTANT);
return (first + second) % CONSTANT;
}
}
}
C++
Python
总结
【剑指 Offer】10-I.斐波那契数列的更多相关文章
- 剑指offer七之斐波那契数列
一.题目 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.n<=39. 二.思路 序号: 0 1 2 3 4 5 ...
- 剑指offer 07:斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).(n<=39) 法一: public class Solution { publi ...
- 【剑指Offer】10- I. 斐波那契数列 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人微信公众号:负雪明烛 目录 题目描述 解题方法 递归 动态规划 日期 题目地址:htt ...
- 剑指offer-面试题9.斐波拉契数列
题目一:写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列的定义如下: { n=; f(n)={ n=; { f(n-)+f(n-) n>; 斐波拉契问题很明显我们会想到用递归来解决: ...
- 剑指offer-矩形覆盖-斐波那契数列(递归,递推)
class Solution { public: int rectCover(int number) { if(number==0 || number==1||number==2) return nu ...
- 剑指offer——面试题10:斐波那契数列
个人答案: #include"iostream" #include"stdio.h" #include"string.h" using na ...
- 剑指offer第二版面试题10:斐波那契数列(JAVA版)
题目:写一个函数,输入n,求斐波那契数列的第n项.斐波那契数列的定义如下: 1.效率很低效的解法,挑剔的面试官不会喜欢 使用递归实现: public class Fibonacci { public ...
- 剑指offer 面试题10:斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 编程思想 知道斐波拉契数列的规律即可. 编程实现 class Solu ...
- 【剑指offer】10A--求裴波那切数列的第n项,C++实现
#本文是牛客网<剑指offer>刷题笔记 1.题目 写入一个函数,输入n,输出裴波那切数列的第n项 2.思路 递归--时间和空间复杂度高 循环--时间和空间复杂度低,通过循环迭代计算第n项 ...
随机推荐
- Panda Global 要点聚焦,区块链在数字医疗的落地应
据Panda Global,随着区块链技术影响力的不断扩大,其应用性已涉及更加广泛的领域,不断更新着人们的认知.在区块链技术未介入之前,关于医疗行业和数字经济结合早已不是什么新鲜话题,相关研究不少 但 ...
- 深度剖析目标检测算法YOLOV4
深度剖析目标检测算法YOLOV4 目录 简述 yolo 的发展历程 介绍 yolov3 算法原理 介绍 yolov4 算法原理(相比于 yolov3,有哪些改进点) YOLOV4 源代码日志解读 yo ...
- TCP连接时动态端口的相关问题说明
最近在线上遇到一个TCP动态端口相关的问题,之前没有留意过此类问题,做个笔记记录在这里,希望也能给大家提供个参考. 简单介绍下问题的场景:Windows服务器上,部署了网关程序SG和RPC进程,其中R ...
- 算法——1~n 整数中 1 出现的次数
输入一个整数 n ,求1-n这n个整数的十进制表示中1出现的次数. 例如,输入12,1-12这些整数中包含1 的数字有1.10.11和12,1一共出现了5次. leetcode 解题思路:依次遍历每一 ...
- 如何使用交易开拓者(TB)开发数字货币策略
更多精彩内容,欢迎关注公众号:数量技术宅.想要获取本期分享的完整策略代码,请加技术宅微信:sljsz01 为何使用交易开拓者(TB)作为回测工具 交易开拓者(后文以TB简称)是一个支持国内期货市场K线 ...
- java中什么是对象,什么是对象引用
在Java语句中,我们都会用到"=",但是这个"="的意义大部分人都没有一个清楚明确的认知 例如:Student a = new Student(); Stud ...
- 【原创】WPF TreeView带连接线样式的优化(WinFrom风格)
一.前言 之前查找WPF相关资料的时候,发现国外网站有一个TreeView控件的样式,是WinFrom风格的,样式如下,文章链接:https://www.codeproject.com/tips/67 ...
- 2020-2021-1 20209307 《Linux内核原理与分析》第八周作业
这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)> 这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第八周作业> 这个作业的目标 & ...
- Fabric 配置 order节点问题
问题描述: Error: failed to create deliver client: orderer client failed to connect to orderer.example.co ...
- [日常摸鱼]bzoj1470[noi2002]Savage
晚上做到的一个扩欧的水题(?) wa了好几发感觉自己药丸-重新推了一遍公式才发现自己打错了orz 借此复习一下扩欧吧-orz 题目:http://www.lydsy.com/JudgeOnline/p ...