爬楼梯

描述:假设你正在爬楼梯,需要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]。

原文地址:https://www.cnblogs.com/Gobenk/p/6518864.html