解题里全是直接说用斐波那契数列F(n)=F(n-1)+F(n-2),可是数学不好的想了好久都推不出来…
题目:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
C:
int climbStairs(int n){
int a=1,b=2,c;
if(n<=2) return n;
for(int i=2;i<n;i++){
c=a+b;
a=b;
b=c;
}
return c;
}
思路:
4阶台阶F(4):
分情况:
1.第一次迈1阶,则剩下3阶按台阶等于3来走,则是F(n-1)=F(3);
2.第一次迈2阶,则剩下2阶按台阶等于2来走,则是F(n-2)=F(2);
5阶台阶F(5):
分情况:
1.第一次迈1阶,则剩下4阶按台阶等于4来走,则是F(n-1)=F(4);
2.第一次迈2阶,则剩下3阶按台阶等于3来走,则是F(n-2)=F(3);
…
以此类推