一、 題目
爬樓梯,一共有n階,每次可以跨1階或2階,則爬到頂部一共有多少種爬法?
二、 分析
設f(n)表示爬n階樓梯的不同種方法數,為了爬到第n階處,有兩種選擇:
1. 從n-1階前進一步
2. 從n-2階前進兩步
因此有,f(n)=f(n-1)+f(n-2) 這不就是斐波那契數列嗎?
故有,
方法1:迭代
方法2:遞歸
方法3:公式法 F(n)=(1/√5)*{[(1+√5)/2]^n -[(1-√5)/2]^n}
class Solution {
public:
int climbStairs(int n) {
int flag;
int stair0=1;
int stair1=1;
if(n<=0)
return 0;
if(n==1)
return 1;
for(int i=2;i<=n;i++) {
flag=stair1;
stair1=stair0+stair1;
stair0=flag;
}
return stair1;
}
};
公式法:
class Solution {
public:
int climbStairs(int n) {
double flag=sqrt(5);
return floor((pow((1+flag)/2,n+1)+pow((1-flag)/2,n+1))/flag+0.5);
}
};