题目:

假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?

样例:

比如n=3,1+1+1=1+2=2+1=3,共有3种不同的方法
返回 3

思路:

因为一次只能爬一步或者两步。所以第n步有两种方法:第一种是从n-1步的地方爬到顶部;另一种是从n-2步的地方直接爬到顶部。a[i]表示到达第i步有多少种不同的方法,a[i] = a[i-1]+a[i-2]。本题类似于斐波那契数列(递归的方法,但是太耗时间)。

参考答案:

class Solution {
public:
    /**
     * @param n: An integer
     * @return: An integer
     */
    int climbStairs(int n) {
        // write your code here
    /*迭代的方法当n=44时,代码执行的次数太多
        if(n == 1)
            return 1;
        if(n == 2)
            return 2;
        else
            return climbStairs(n-1)+climbStairs(n-2);
    */
    //典型的空间换时间
    int a[n+1];
    a[0] = 0;
    a[1] = 1;
    a[2] = 2;
    for(int i=3; i<=n; i++)
    {
        a[i] = a[i-1] + a[i-2];
    }
    return a[n];
    }
};

wydong
40 声望5 粉丝

wyd