题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
矩阵快速幂直接去求:矩阵快速幂
class Solution { public: struct mat{ int a[2][2]; }; mat mat_mul(mat x,mat y){ mat res; memset(res.a,0,sizeof(res.a)); for(int i=0;i<2;i++) for(int j=0;j<2;j++) for(int k=0;k<2;k++) { res.a[i][j]+= x.a[i][k]*y.a[k][j]; } return res; } int pow(int n){ mat ans,res; res.a[0][0]=1; res.a[0][1]=1; res.a[1][0]=1; res.a[1][1]=0; memset(ans.a,0,sizeof(ans.a)); for(int i=0;i<2;i++)ans.a[i][i]=1; while(n){ if(n&1)ans=mat_mul(ans,res); res=mat_mul(res,res); n=n>>1; } return ans.a[0][1]; } int Fibonacci(int n) { return pow(n); } };
《剑指Offer》斐波那契数列
最新推荐文章于 2021-03-24 09:47:48 发布