斐波那契数列(剑指offer 10-I)
一、题目描述
写一个函数,输入 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)相关推荐
- 剑指 Offer 10- I. 斐波那契数列/剑指 Offer 10- II. 青蛙跳台阶问题
2020-07-02 1.题目描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少 ...
- [剑指Offer]斐波那契数列、跳台阶、兔子数量问题(递归、非递归)(Java)
剑指Offer题目 斐波那契数列 题目描述 [剑指Offer 7]大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). [剑指Offer 8]一只青蛙 ...
- Lintcode--3(366)--斐波那契数列
题目:查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第 i-1 个数和第i-2 个数 ...
- 查找斐波纳契数列中第 N 个数
所谓的斐波纳契数列是指:前两个数是0和1,第i个数是第i-1个数和第i-2个数的和. eg:斐波纳契数列的钱10 个数是指{0,1,1,2,3,5,8,13,21,34.,,,,,} 一般求解斐波纳契 ...
- C语言实现斐波那契数列。
#斐波那契数列,指的是这样一个数列:1.1.2.3.5.8.13.--它有如下特点:第一,第二项为 1,从第三项开始,每一项为前两项数之和,即: F1 = 1 (n = 1) F2 = 1 (n =2 ...
- 7-112 斐波那契数列 (10 分)
7-112 斐波那契数列 (10 分) (java题解) pta_java题解 题目 斐波那契数列是指这样的一个数列:1,1,2,3,5,8,13,21,-,这个数列从第3个数开始每个数都等于前两个数 ...
- 366. 斐波纳契数列
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载. 题目需求 描述 查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第 ...
- PTA 7-169 斐波那契数列
PTA 7-169 斐波那契数列 分数 10 作者 wjl 单位 赤峰学院 斐波那契数列是指这样的一个数列:1,1,2,3,5,8,13,21,-,这个数列从第3个数开始每个数都等于前两个数的和,请输 ...
- lintcode斐波那契数列
描述:查找斐波纳契数列中第 N 个数 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第 i-1 个数和第i-2 个数的和. 斐波纳契数列的前10个数字是: 0, 1, 1, 2, ...
- 斐波那契数列(递归和非递归算法)
一.斐波那契数列介绍: 斐波那契数列,又称黄金分割数列.斐波那契数列是指这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,98 ...
最新文章
- C#中判断文件夹或文件是否存在的方法
- 没事做做题之棋盘上的距离
- Linux下 数据文件 效验问题
- 将JavaScript集成到QML中
- Could not find result map
- java创建内部面板类_java-RGB调色面板的实现(事件监听器之匿名内部类)
- wps linux 字体_WPS Office:Linux 上的 Microsoft Office 的免费替代品 | Linux 中国
- node.js学习文档_学习NodeJs从每天一个小知识点开始
- 在任意目录导入自定义库
- 二级c语言不写编程,计算机二级C语言 到底是不是考原题
- VAD自适应算法降噪控制毕业论文【matlab】
- html中代表颜色的字母16个,html中16进制的代码对应颜色表
- 有哪些电影一定要趁年轻看? - 风之影的回答 - 知乎
- vue 数据看板大屏适配方案
- 阅读笔记03——魔鬼搭讪学
- 当老师帮学生作弊的时候
- win10自启动方法
- C++ 宽字符 窄字符 char wchar
- vscode无法连接扩展市场问题
- java dwg文件_如何用java实现dwg的预览图?
热门文章
- C语言程序的特点及设计思想
- 【CF #797 Div3】A-E
- http响应头和请求头配置对照表
- 计算机准备计划,你为计算机考试做好准备了吗?敬业签便签帮你制定详细复习计划...
- OPENGLES 绘制纹理带黑圈pre-multiplying
- word里文字竖向排列(设置竖排文字)
- galaxy s6 android8,这些三星机型确认可以升级Android 8.0
- android anr 文件路径,android出现ANR 如何导出anr文件
- HAL库配置STM32F1系列定时器驱动步进电机(三)
- 为什么要学习Linux?