码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] Climbing Stairs

时间:2017-07-23 19:43:57      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:play   src   ide   cas   ret   问题   cli   经典的   blog   

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

Note: Given n will be a positive integer.

爬楼梯问题,类似于经典的斐波那契数列问题。由于一次只能爬1或者2次楼梯,先从最后一步开始分析,如果最后还有1层楼梯,则有1种办法(1),如果最后还有2层楼梯,则有2种方法(1 + 1)或(2)。然后递归的进行计算即可。

技术分享
class Solution {
public:
    int climbStairs(int n) {
        if (n == 1)
            return 1;
        if (n == 2)
            return 2;
        return climbStairs(n - 1) + climbStairs(n - 2);
    }
};
// TLE
TLE

这个方法显然会超时,因为递归的写法都可以转换成迭代的写法,以不至于导致超时。用a维护爬楼梯的次数。

class Solution {
public:
    int climbStairs(int n) {
        int a = 1, b = 1;
        while (n--) {
            b = a - b;
            a = a + b;
        }
        return a;
    }
};
// 0 ms

 使用动态规划,dp是一个结果数组,维护每一层所需要的爬楼梯的次数。

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

 

[LeetCode] Climbing Stairs

标签:play   src   ide   cas   ret   问题   cli   经典的   blog   

原文地址:http://www.cnblogs.com/immjc/p/7225616.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!