时间限制:1秒 空间限制:32768K 热度指数:323317
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
class Solution {
public:
typedef struct {
int d[2][2];
}Ma;
int jumpFloor(int number) {
if(number==1)return 1;
Ma q={1,0,0,1};//单位阵
Ma res={1,1,1,0};
while(number){ //矩阵快速幂
if(number&1){
q=comb(res,q);
}
number>>=1;
res=comb(res,res);
}
return q.d[0][0];
}
Ma comb(Ma a,Ma b) //矩阵乘法
{
Ma c;
for(int i=0;i<2;i++)
for(int j=0;j<2;j++){
c.d[i][j]=0;
for(int k=0;k<2;k++)
c.d[i][j]+=a.d[i][k]*b.d[k][j];
}
return c;
}
};