斐波那契数列log(n)时间复杂度解决方案---LeetCode70题代码

代码思路百度一大把,我主要是自己撸了遍,通过过了LeetCode测试。截图如下:

vector<vector<int> > operator * (const vector<vector<int> >& a, const vector<vector<int> >& b) //矩阵乘法操作符重载
{
    
    int m = a.size(), n = a[0].size();
    int n2 = b.size(), l = b[0].size();
    if(n != n2)
    {
        vector<vector<int> > ans;
        return ans ;
    }
    vector<vector<int> > res(m,vector<int>(l,0));
    int i = 0, j = 0, k = 0;
    for (i = 0; i < m; ++i)
    {
       for(j = 0; j <n; ++j)
       {
           for(k = 0; k <l; ++k)
           {
               res[i][j] += a[i][k]*b[k][j];
           }
       }
    }
    return res;
    
}
class Solution {
public:
    int climbStairs(int n) 
    {
       int a = 1, b = 2;
       vector<vector<int> > G(2,vector<int>(2,1));
       G[0][0] = 0;

       if(n ==1)
       {
           return a;
       }
       if (n == 2)
       {
          return b;
       }
       
       
       vector<vector<int> > res = QuickPow(G,n-2); //注意此处n的变化
       b = res[1][0]*a + res[1][1] * b;
       return b;
    }

    vector<vector<int> > QuickPow(vector<vector<int> > &G, int n) //矩阵快速幂
    {
        if(n == 1 )
        {
            return G;
        }
        else
        {
            vector<vector<int> > res = QuickPow(G,n>>1);
            if(n&1)
            {
               
                return res * res * G;
            }
            else
            {
                return res* res;
            }
            
        }
        
    }
};

另外LeetCode有个bug:VSCode下安装个LeetCode插件,可以不花钱就白嫖所有题目,题目能不能全部提交进行测试我还不清楚,我试了 下后面要花钱某一道的题目,是可以提交的。白嫖成功证明如下(我穷没钱开LeetCode的会员):

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章