[Lintcode]爬梯子
来源:互联网 发布:什么是淘宝客鹊桥 编辑:程序博客网 时间:2024/06/10 02:40
描述:
假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?
样例:
比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法
返回 3
这个爬梯子问题最开始看的时候没搞懂是让干啥的,后来看了别人的分析后,才知道实际上跟斐波那契数列非常相似,假设梯子有n层,那么如何爬到第n层呢,因为每次只能怕1或2步,那么爬到第n层的方法要么是从第n-1层一步上来的,要不就是从n-2层2步上来的,所以递推公式非常容易的就得出了:dp[n] = dp[n-1] + dp[n-2]。 由于斐波那契额数列的求解可以用递归,所以我最先尝试了递归,拿到OJ上运行,显示Time Limit Exceeded,就是说运行时间超了,因为递归计算了很多分支,效率很低,这里需要用动态规划 (Dynamic Programming) 来提高效率,
代码如下:
class Solution {
public:
int climbStairs(int n) {
if (n <= 1) return 1;
vector<int> dp(n);
dp[0] = 1; dp[1] = 2;
for (int i = 2; i < n; ++i) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp.back();
}
};
阅读全文
0 0
- [Lintcode]爬梯子
- 《爬梯子的故事》
- LeetCode之爬梯子
- java实现<爬梯子>问题
- 动态规划-------一个简单爬梯子问题
- Climbing Stairs【爬梯子问题】【容易】
- 算法4 爬梯子Climbing Stairs
- 计蒜客——难题库——“爬梯子”问题
- 爬梯子问题与斐波那契数列
- leetcode 70. Climbing Stairs爬梯子(DP问题)
- LintCode--最小子数组
- LintCode: 最大子数组
- LintCode:子数组之和
- lintcode ----最大子数组
- lintcode ----最小子数组
- lintcode ----子数组之和
- LintCode: 最小子数组
- lintcode,最大子数组
- Java 8新增的Lambda表达式
- SQL SERVER創建流水號的存儲過程
- 奥威Power-BI数据可视化分析--节假日客流量分析
- 分析Hibernate的缓存机制
- 数据结构实验之串二:字符串匹配(查看一个字符串是否为另一个字符串的子串)
- [Lintcode]爬梯子
- UVA679DroppingBalls
- 给初学者的RxJava2.0教程(一)
- HTNML5常用标签分类
- springboot多环境(dev、test、prod)配置
- iOS app多个开发环境变量(target)下配置Podfile文件
- 百度连续三年获得亚洲专利转让精英奖
- R语言中的集合操作
- c/c++常见面试题(一)