剑指offer——面试题9:求斐波那切数列的四种方法
剑指offer——面试题9:求斐波那切数列的四种方法
另一个相关的链接:https://blog.csdn.net/Allenlzcoder/article/details/80297333
总结下求斐波那切数列的4中方法
Solution1:递归法
代码复杂度为O(2n)O(2n)O(2^n),简单却不是一个好思路呀~
class Solution {
public:int Fibonacci(int n) {if(n==1 || n==2) return 1;return Fibonacci(n-1)+Fibonacci(n-2);}
};
Solution2:迭代法
时间复杂度O(n)O(n)O(n)参考清华大学邓俊辉老师的数据结构中的算法写成。真的是其妙极了~
class Solution {
public:int Fibonacci(int n) {int f=0,g=1;//fib(0)=0,fib(1)=1if(n==0)return f;else if(n==1 || n==2)return g;while(1<n--){g=g+f;f=g-f;}return g;}
};
复杂度为O(n)O(n)O(n)!!!
Solution3:矩阵法
时间复杂度O(logn)O(logn)O(logn)
参考博客网址:https://blog.csdn.net/kuhuaishuxia/article/details/52217872
主要思路:
现在我们主要要知道如何求:。我们可以采用分治法,具体来讲是二分法来解决这个问题:
这样我们可以写出代码如下:
//定义2×2矩阵;
struct Matrix2by2
{ //数据成员 int m00; int m01; int m10; int m11; //构造函数 Matrix2by2(int m_00,int m_01,int m_10,int m_11) { m00 = m_00; m01 = m_01; m10 = m_10; m11 = m_11; } }; //定义2×2矩阵的乘法运算
Matrix2by2 MatrixMultiply(const Matrix2by2& matrix1,const Matrix2by2& matrix2)
{ Matrix2by2 matrix12(1,1,1,0); matrix12.m00 = matrix1.m00 * matrix2.m00 + matrix1.m01 * matrix2.m10; matrix12.m01 = matrix1.m00 * matrix2.m01 + matrix1.m01 * matrix2.m11; matrix12.m10 = matrix1.m10 * matrix2.m00 + matrix1.m11 * matrix2.m10; matrix12.m11 = matrix1.m10 * matrix2.m01 + matrix1.m11 * matrix2.m11; return matrix12; } //定义2×2矩阵的幂运算
Matrix2by2 MatrixPower(unsigned int n)
{ Matrix2by2 matrix(1,1,1,0); if (n == 1) { matrix = Matrix2by2(1,1,1,0); } else if (n % 2 == 0) { matrix = MatrixPower(n / 2); matrix = MatrixMultiply(matrix, matrix); } else if (n % 2 == 1) { matrix = MatrixPower((n-1) / 2); matrix = MatrixMultiply(matrix, matrix); matrix = MatrixMultiply(matrix, Matrix2by2(1,1,1,0)); } return matrix;
}
//计算Fibnacci的第n项
int fib(unsigned int n)
{ if (n == 0) return 0; if (n == 1) return 1; Matrix2by2 fibMatrix = MatrixPower(n-1); return fibMatrix.m00; }
Solution4:公式法
时间复杂度O(1)O(1)O(1)
斐波那切数列的通项公式:
class Solution {
public:int Fib(int n) {const double s = sqrt(5);return (pow((1+s)/2, n) - pow((1-s)/2, n))/s;}
}
剑指offer——面试题9:求斐波那切数列的四种方法相关推荐
- 剑指offer | 面试题10:斐波那切数列
转载本文章请标明作者和出处 本文出自<Darwin的程序空间> 本文题目和部分解题思路来源自<剑指offer>第二版 开始行动,你已经成功一半了,献给正在奋斗的我们 题目 求斐 ...
- 剑指offer——面试题10:斐波那契数列
个人答案: 1 #include"iostream" 2 #include"stdio.h" 3 #include"string.h" 4 ...
- [剑指offer]面试题9:斐波那契数列
面试题9:斐波那契数列 题目一:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: ❖ 效率很低的解法,挑剔的面试官不会喜欢 代码如下: long long f ...
- 《剑指offer》c++版本 10. 斐波那契数列
如题: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). 这道题基本上学过算法的人都直到,斐波那契数列即,即1,1,2,3,5....... 用数 ...
- 牛客网(剑指offer) 第七题 斐波那契数列
//问题描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 function Fibonacci($n){//显然递归超时了 2333333333 ...
- C语言实现求解斐波那契数列的四种方法及优化处理(递归,迭代,特殊性质公式,矩阵快速幂)
众所周知,斐波那契数列是非常经典的一个数列,它的数学公式如下 为了便于观察,我们列出它的几项:0 1 1 2 3 5 8 13 21...... 下面我们将介绍四种方法来用C语言计算机 ...
- 剑指Offer #07 斐波那契数列(四种解法)| 图文详解
题目来源:牛客网-剑指Offer专题 题目地址:斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 题目解析 ...
- 辛星Java动态规划教程第一篇:求斐波那切数列
对于理解动态规划来说,最简单的题目还是求斐波那切数列的第i个值.很多资料都把它作为一个印子,以此来介绍动态规划的基本定义. 不过也有些书认为菲波那切数列过于简单,以致于不能让读者感受到动态规划的优美之 ...
- Python中斐波那契数列的四种写法
在这些时候,我可以附和着笑,项目经理是决不责备的.而且项目经理见了孔乙己,也每每这样问他,引人发笑.孔乙己自己知道不能和他们谈天,便只好向新人说话.有一回对我说道,"你学过数据结构吗?&qu ...
最新文章
- 前来推荐一本比较喜欢的读物——《浪潮之巅》
- 基于注解的 IOC 配置——创建对象(Component、Controller、Service、Repository)注入数据(Autowired、Qualifier、Resource、Value)
- MySQL协议包说明
- python pyqt5 窗体自适应_Pyqt5自适应布局实例
- 一阶暂态电路三要素法和三种响应
- gitter 卸载_最佳Gitter渠道:开发人员工具
- 云服务器如何链接本地打印机_利用FileZilla搭建云服务器FTP服务端和本地客户端...
- 修复版ZFAKA发卡系统源码 自适应PC+手机端
- 部署SCVMM2012 SP1 集群(1)---部署AD
- javaEE(3)_servlet基础
- 类和对象编程(一):类成员函数
- android 权限问题吗,Android 6.0前后权限问题
- echart添加点击跳转链接事件多次跳转的问题
- php++仿网页版微信,【原创】html5高仿微信网页版|h5仿微信聊天实战
- 用Java解决牛客网题目JD1年终奖
- VSS的口令破解算法的思路
- html边框如何制作三角形,如何用css3绘制有边框的三角形
- python股票预测_利用Keras长短期记忆(LSTM)模型预测股票价格
- 【转】OrCAD 16.3安装和破解方法
- Excel(WPS)使用VBA,不打开文件情况下提取其他工作簿数据
热门文章
- 【原】c#对xml的操作
- java 远程连接_java实现连接远程服务器并执行命令的基本原理
- 服务器查看数据库日志文件,服务器数据库查看日志文件
- 服务器脱机状态,从脱机工作切换到联机工作
- 擦地机器人毕业设计_救援机器人毕业设计
- python新手图解_Python完全新手教程
- java horizontalbarchart_Android-MPChart,HorizontalBarChart 水平柱状图颜色渐变
- 1977年发生事件_大金蛇:千年银蛇,万年金蛇:1977年【蛇蛇人】11月上旬家里有“爆炸性”事件发生!...
- android回收内存保存变量,android基础之onSaveInstanceState用法(一)保存容易被回收的自定义类的静态全局变量...
- maven配置testng_TestNG Maven Surefire插件配置