一、题目描述

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:

F(0) = 0,   F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2
输出:1

示例 2:

输入:n = 5
输出:5

提示:

0 <= n <= 100

二、思路讲解

动态规划。

斐波那契数列在n>1时存在递推式  F(n)=F(n−1)+F(n−2) ,那么我们就可以写一个循环,用a变量来保存F(n-2),用b变量来保存F(n-1),用c变量来保存F(n)。

这里注意:如果用一个数组来保存斐波那契数列,显然更容易理解。但是这样也提高了空间复杂度。

由于存在大数问题,最后的结果只输出模以1000000007的结果。所以我们将每次运算的结果都模以1000000007,只在意他的尾数即可。

其实还有时间复杂度更低的方法:矩阵快速幂。但是我的段位不够没法理解。

三、Java代码实现

public static int fib(int n) {int a = 0;    //f(n-2)int b = 1; //f(n-1)int c = 0; //f(n)for(int i=2; i<=n+1; i++) {c = a + b;c = c % 1000000007;a = b;b = c;}return a;}

四、时空复杂度分析

时间复杂度:O(N)       使用了一次循环

空间复杂度:O(1)         只用了几个变量来保存

斐波那契数列(剑指offer 10-I)相关推荐

  1. 剑指 Offer 10- I. 斐波那契数列/剑指 Offer 10- II. 青蛙跳台阶问题

    2020-07-02 1.题目描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少 ...

  2. [剑指Offer]斐波那契数列、跳台阶、兔子数量问题(递归、非递归)(Java)

    剑指Offer题目 斐波那契数列 题目描述 [剑指Offer 7]大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). [剑指Offer 8]一只青蛙 ...

  3. Lintcode--3(366)--斐波那契数列

    题目:查找斐波纳契数列中第 N 个数.           所谓的斐波纳契数列是指:           前2个数是 0 和 1 .           第 i 个数是第 i-1 个数和第i-2 个数 ...

  4. 查找斐波纳契数列中第 N 个数

    所谓的斐波纳契数列是指:前两个数是0和1,第i个数是第i-1个数和第i-2个数的和. eg:斐波纳契数列的钱10 个数是指{0,1,1,2,3,5,8,13,21,34.,,,,,} 一般求解斐波纳契 ...

  5. C语言实现斐波那契数列。

    #斐波那契数列,指的是这样一个数列:1.1.2.3.5.8.13.--它有如下特点:第一,第二项为 1,从第三项开始,每一项为前两项数之和,即: F1 = 1 (n = 1) F2 = 1 (n =2 ...

  6. 7-112 斐波那契数列 (10 分)

    7-112 斐波那契数列 (10 分) (java题解) pta_java题解 题目 斐波那契数列是指这样的一个数列:1,1,2,3,5,8,13,21,-,这个数列从第3个数开始每个数都等于前两个数 ...

  7. 366. 斐波纳契数列

    提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载. 题目需求 描述 查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第  ...

  8. PTA 7-169 斐波那契数列

    PTA 7-169 斐波那契数列 分数 10 作者 wjl 单位 赤峰学院 斐波那契数列是指这样的一个数列:1,1,2,3,5,8,13,21,-,这个数列从第3个数开始每个数都等于前两个数的和,请输 ...

  9. lintcode斐波那契数列

    描述:查找斐波纳契数列中第 N 个数 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第 i-1 个数和第i-2 个数的和. 斐波纳契数列的前10个数字是: 0, 1, 1, 2, ...

  10. 斐波那契数列(递归和非递归算法)

    一.斐波那契数列介绍: 斐波那契数列,又称黄金分割数列.斐波那契数列是指这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,98 ...

最新文章

  1. C#中判断文件夹或文件是否存在的方法
  2. 没事做做题之棋盘上的距离
  3. Linux下 数据文件 效验问题
  4. 将JavaScript集成到QML中
  5. Could not find result map
  6. java创建内部面板类_java-RGB调色面板的实现(事件监听器之匿名内部类)
  7. wps linux 字体_WPS Office:Linux 上的 Microsoft Office 的免费替代品 | Linux 中国
  8. node.js学习文档_学习NodeJs从每天一个小知识点开始
  9. 在任意目录导入自定义库
  10. 二级c语言不写编程,计算机二级C语言 到底是不是考原题
  11. VAD自适应算法降噪控制毕业论文【matlab】
  12. html中代表颜色的字母16个,html中16进制的代码对应颜色表
  13. 有哪些电影一定要趁年轻看? - 风之影的回答 - 知乎
  14. vue 数据看板大屏适配方案
  15. 阅读笔记03——魔鬼搭讪学
  16. 当老师帮学生作弊的时候
  17. win10自启动方法
  18. C++ 宽字符 窄字符 char wchar
  19. vscode无法连接扩展市场问题
  20. java dwg文件_如何用java实现dwg的预览图?

热门文章

  1. C语言程序的特点及设计思想
  2. 【CF #797 Div3】A-E
  3. http响应头和请求头配置对照表
  4. 计算机准备计划,你为计算机考试做好准备了吗?敬业签便签帮你制定详细复习计划...
  5. OPENGLES 绘制纹理带黑圈pre-multiplying
  6. word里文字竖向排列(设置竖排文字)
  7. galaxy s6 android8,这些三星机型确认可以升级Android 8.0
  8. android anr 文件路径,android出现ANR 如何导出anr文件
  9. HAL库配置STM32F1系列定时器驱动步进电机(三)
  10. 为什么要学习Linux?