斐波那契数列的快速解法
来源:互联网 发布:知行理工密码 编辑:程序博客网 时间:2024/06/07 05:55
题目描述
求解斐波那契数列,要求时间复杂度为O(
题目解答
主要思路是快速幂和矩阵乘法的结合律
利用数学归纳法来证明。
快速幂的思想:
当n为偶数的时候
当n为奇数的时候
那么
代码实现
class Solution { /** * @param n: an integer * @return an integer f(n) */ private static int[][] A = {{1,1},{1,0}}; public int fibonacci(int n) { // write your code here if(n < 1) return 0; int a = 0; int b = 1; if(n == 1) return a; if(n == 2) return b; int[][] ret= power(n-2); return ret[0][0]; } // 求 a ^ n public static int[][] power(int n){ int[][] a = new int[2][2]; if(n == 1){ a = A; }else if(n % 2 == 0){ a = matrixMultiply(power(n/2), power(n/2)); }else if(n % 2 == 1){ a = matrixMultiply(power(n/2), power(n/2)); a = matrixMultiply(a, A); } return a; } /* *两个矩阵相乘 */ public static int[][] matrixMultiply(int[][] a, int[][] b){ int[][] ret = new int[2][2]; ret[0][0] = a[0][0]*b[0][0] + a[0][1]*b[1][0]; ret[0][1] = a[0][0]*b[0][1] + a[0][1]*b[1][1]; ret[1][0] = a[1][0]*b[0][0] + a[1][1]*b[1][0]; ret[1][1] = a[1][0]*b[0][1] + a[1][1]*b[1][1]; return ret; }}
0 0
- 斐波那契数列的快速解法
- 斐波那契数列的解法?
- 斐波那契数列的解法
- 斐波那契数列解法
- 高效斐波那契数列解法
- 斐波那契数列解法
- 斐波那契数列实用解法
- 斐波那契数列的几种计算机解法
- 关于斐波那契数列的几种解法
- 斐波那契数列的几种不同解法
- 斐波那契数列的低效与高效解法
- 斐波那契数列的几种计算机解法
- 斐波那契数列的矩阵解法(java实现)
- 斐波那契数列的几种计算机解法
- 斐波那契数列的实用解法
- 斐波那契数列的几种解法
- 斐波那契数列递归解法与循环解法
- 斐波那契数列解法,矩阵解法,学习
- update修改数据
- 数字划分类 dp
- ramoops&pstore简要说明
- 使用large 限定符 最小宽度限定符
- 初识设计模式
- 斐波那契数列的快速解法
- SharedPreference.Editor的apply和commit方法异同
- Archer 【CF--312B】
- 通过在BasicController使用ModelAttribute标签注入Request/Response/Session
- Struts2框架学习(二) Action
- 插入排序
- 有焦点的TextView
- 学习模式
- UVA 题目624 CD(01背包输出路径啊)