代碼思路百度一大把,我主要是自己擼了遍,通過過了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的會員):