Climbing Stairs
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
题目:爬楼梯共n阶,一次可以登1或2阶,问爬到顶端共有多少种方法。
分析:分析下可以得到是斐波那契数列。假设已经知道爬n阶楼梯共有f(n)种方法,如果爬n+1阶可以分为两种情况:
- 把n+1阶分成两部分:第一次爬1阶,剩下n阶,共有f(n)种方法。
- 把n+1分成两部分:第一次爬2阶,剩下n-1阶,共有f(n-1)种方法。
因此,f(n+1)=f(n)+f(n-1).
注意:递归的方法,有很多重复计算(超时),因此用迭代方式实现。
代码:
class Solution {
public:
int climbStairs(int n) {//斐波那契数列,递归超时,循环。
//if(n==1 || n==2) return n;
//return climbStairs(n-1)+climbStairs(n-2);
if(n==1 || n==2) return n;
int a1=1,a2=2;//表示数列中前后两个数
for(int i=3;i<=n;i++){
int t=a1+a2;
a1=a2;
a2=t;
}
return a2;
}
};