lintcode climbing-stairs 爬楼梯 递归 循环
2016-07-26 14:38
597 查看
问题描述
lintcode笔记
爬n级楼梯的方法数,等于爬上n-1级楼梯的方法数(再爬1级),加上爬上n-2级楼梯的方法数(再爬2级)。climbStairs(n) = climbStairs(n-1) + climbStairs(n-2)
但是这样算会有大量的重复计算。可以将中间结果缓存起来。(代码2)
也可以根据这个递推式自底向上地计算。先算climbStairs(1),climbStairs(2)。。一直算到climbStairs(n)。(代码1)
代码1
class Solution { public: /** * @param n: An integer * @return: An integer */ int climbStairs(int n) { // write your code here if (n == 0 || n == 1) return 1; int pre = 1; int now = 1; for (int i = 2; i <= n; i++) { int tmp = now; now = pre + now; pre = tmp; } return now; } };
代码2
class Solution { public: /** * @param n: An integer * @return: An integer */ map<int, int> m; int climbStairs(int n) { // write your code here if (n == 1 || n == 0) return 1; int res1, res2; if (m.find(n-1) != m.end()) res1 = m[n-1]; else { res1 = climbStairs(n-1); m[n-1] = res1; } if (m.find(n-2) != m.end()) res2 = m[n-2]; else { res2 = climbStairs(n-2); m[n-2] = res2; } return res1 + res2; } };
相关文章推荐
- C++动态规划之最长公子序列实例
- C++动态规划之背包问题解决方法
- C#使用动态规划解决0-1背包问题实例分析
- 动态规划
- C++ 动态规划
- 动态规划解决背包问题的核心思路
- DP(动态规划) 解游轮费用问题
- 动态规划的用法——01背包问题
- 动态规划的用法——01背包问题
- 《收集苹果》 动态规划入门
- 《DNA比对》蓝桥杯复赛试题
- 《背包问题》 动态规划
- 自顶向下动态规划解决最长公共子序列(LCS)问题
- 01背包问题
- 初学ACM - 半数集(Half Set)问题 NOJ 1010 / FOJ 1207
- 关于爬楼梯的动态规划算法
- 动态规划 --- hdu 1003 **
- DP问题各种模型的状态转移方程
- 0-1背包解题过程
- 背包问题