首页 > 代码库 > [LeetCode] Climbing Stairs
[LeetCode] Climbing Stairs
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
这个方法显然会超时,因为递归的写法都可以转换成迭代的写法,以不至于导致超时。用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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。