描述:假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?
样例:比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法 返回 3
code:
class Solution {
public:
/**
* @param n: An integer
* @return: An integer
*/
int climbStairs(int n) {
// write your code here
if(n==0) //分楼梯数大于1和等于1
return 1;
int Sum[n];
Sum[0]=1;
if(n>1)
Sum[1]=2;
for(int i=2;i<n;i++)
Sum[i]=Sum[i-1]+Sum[i-2];//斐波那契数列求和
return Sum[n-1];
}
};
思路:1st:如果用传统方法做的话,程序的运算量大而且代码冗杂,不推荐。
2nd:所以最快的方法是先找到规律在设计算法
第一层:Sum1=1;
第二层:1+1=2, 2 Sum2=1+1=2;
第三层:1+1+1=3,1+2=3,2+1=3, Sum3=1+1+1=3;
第四层:1+1+1+1=4,1+1+2=4,1+2+1=4,2+1+1=4,2+2=4, Sum4=1+1+1+1+1=5;
不难的规律是Sum3=Sum2+Sum1=2+1=3,Sum4=Sum3+Sum2=3+2=5,
可以得出一般规律:Sum[i]=Sum[i-1]+Sum[i-2]。