class _2by2{
private:
int d00,d01,d10,d11;
public:
_2by2(int d00,int d01,int d10,int d11):d00(d00),d01(d01),d10(d10),d11(d11){}
void operator *= (const _2by2& rhs){
int td00 = this->d00 * rhs.d00 + this->d01 * rhs.d10;
int td01 = this->d00 * rhs.d01 + this->d01 * rhs.d11;
int td10 = this->d10 * rhs.d00 + this->d11 * rhs.d10;
int td11 = this->d10 * rhs.d01 + this->d11 * rhs.d11;
this->d00 = td00;
this->d10 = td10;
this->d01 = td01;
this->d11 = td11;
}
int get00(){
return d00;
}
};
class Solution {
private:
_2by2 power(_2by2& multiplier, int n){
_2by2 ans(1,0,0,1);
while(n){
if(n & 1){
ans *= multiplier;
}
multiplier *= multiplier;
n = n >> 1;
}
return ans;
}
public:
int climbStairs(int n) {
_2by2 multiplier(1,1,1,0);
return power(multiplier,n).get00();
}
};
Leetcode Climbing Stairs logN 做法
最新推荐文章于 2020-05-26 10:22:45 发布