LeetCode 70. Climbing Stairs 动态规划问题
2017-07-19 20:37
323 查看
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.The problem seems to be a dynamic programming one. Hint: the tag also suggests that!Here are the steps to get the solution incrementally.Base cases:if n <= 0, then the number of ways should be zero.if n == 1, then there is only way to climb the stair.if n == 2, then there are two ways to climb the stairs. One solution is one step by another; the other one is two steps at one time.The key intuition to solve the problem is that given a number of stairs n, if we know the number ways to get to the points
[n-1]and
[n-2]respectively,denoted as
n1and
n2,then the total ways to get to the point is
n1+ n2. Because from the
[n-1]point, we can take one single step to reach .And from the
[n-2]point, we could take two steps to get there. There is NO overlappingbetween these two solution sets, because we differ in the final step.Now given the above intuition, one can construct an array where each node stores the solution for each number n. Or if we look at it closer, it is clear that this is basically a fibonacci number, with the starting numbers as 1 and 2, instead of 1 and 1.解释的很清楚,这是一个动态规划问题,啥叫动态规划呢?动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。class Solution {public:int climbStairs(int n) {if(n <= 0) return 0;if(n == 1) return 1;if(n == 2) return 2;int one_step_before = 2;int two_steps_before = 1;int all_ways = 0;for(int i=2; i<n; i++){all_ways = one_step_before + two_steps_before;two_steps_before = one_step_before;one_step_before = all_ways;}return all_ways;}};
相关文章推荐
- leetcode 474. Ones and Zeroes若干0和1组成字符串最大数量+动态规划DP+背包问题
- LeetCode -- Triangle 路径求最小和( 动态规划问题)
- 【启发】leetcode - 121. Best Time to Buy and Sell Stock 【动态规划 + 连续区间问题 + 试探性购买】
- 动态规划 DP leetcode403 青蛙过河问题
- leetcode 327. Count of Range Sum 字段和问题 + 动态规划DP解决 + 字段数 + 暴力求解真好
- 动态规划解决leetcode中的House Robber问题
- leetcode 740. Delete and Earn 抢劫问题的改版 + 动态规划DP
- LeetCode -- Triangle 路径求最小和( 动态规划问题)
- LeetCode总结,动态规划问题小结
- 【Leetcode】动态规划问题详解(持续更新)
- 【动态规划(三)】经典背包问题
- 【动态规划】完全背包问题
- 用机器学习解决LeetCode问题
- 【动态规划】简单背包问题II
- LCS问题(最长公共子序列)-动态规划实现
- 【动态规划】货币系统问题_未提交_已提交
- Leetcode之Missing Number问题
- lintcode 动态规划问题
- [LeetCode - 动态规划] 120. Triangle
- 硬币找零问题 - 动态规划