LeetCode探索之旅(18)-70爬楼梯

继续刷LeetCode,第70题,求一次只能爬一阶或者两阶台阶的时候,总共有多少种情况可以到达第N阶台阶。

分析:
这个是很经典的一个题目,可以有两种方法来解决,一种是通过递归调用,结果等于前两次结果的和;第二种是通过循环的方式,第一阶与第二阶给定,第三阶开始由前两次的结果求和,直到第N阶。采用的方法可以是通过两个临时变量存储前两次的结果;或者通过容器的方式,将每次的结果保存,再到达目标的时候提取出前两次的值,再求和。

问题:
1、递归调用的时候出现时间超时的问题;
2、容器的使用;
3、动态规划的解决办法。

附上代码1:

class Solution {
public:
    int climbStairs(int n) {
        if(n==1)
            return 1;
        if(n==2)
            return 2;
        int s=2;
        int tmp2,tmp1=1;
        for(int i=3;i<=n;i++)
        {
            tmp2=s;
            s=s+tmp1;
            tmp1=tmp2;
        }
        return s;
    }
};

代码2:

class Solution {
public:
    int climbStairs(int n) {
        vector<int> m(n,0);
        if(n==1)
            return 1;
        m[0]=1;
        m[1]=2;
        for(int i=2;i<n;i++)
        {
            m[i]=m[i-1]+m[i-2];
        }
        return m[n-1];
    }
};

猜你喜欢

转载自blog.csdn.net/JerryZengZ/article/details/87937676