コード例 #1
0
/*
	| f2 f1| * | 1 1 |^n 这样可以得到最终的结果
	| f1 0 |   | 1 0 |
*/
int climbStairs1(int n){
	if(n<=2)
		return (n==1)?1:2;
	int f1=1,f2=2;
	m2by2 m=matrixPow(n-2);

	int res=m.m_00*f2+m.m_01*f1;
	return res;
}
コード例 #2
0
ファイル: Climbing Stairs.cpp プロジェクト: liuhb86/leetcode
 int climbStairs(int n) {
     if (n<2) return 1;
     int f2 = 1;
     int f1 = 1;
     Matrix22 f;
     f.v[0][0]=f.v[0][1]=f.v[1][0]=1; f.v[1][1]=0;
     Matrix22 r = matrixPow(f,n);
     return r.v[0][0];
 }
コード例 #3
0
m2by2 matrixPow(const int n)
{
	assert(n>0);

	m2by2 m;

	if(n==1)
		m=m2by2(1,1,1,0);

	else if(n%2==0)
	{
		m=matrixPow(n/2);
		m=matrixMultiply(m,m);
	}

	else if(n%2==1)
	{
		m=matrixPow((n-1)/2);
		m=matrixMultiply(m,m);
		m=matrixMultiply(m,m2by2(1,1,1,0));
	}

	return m;
}