leetcode Climbing Stairs
来源:互联网 发布:如何关闭windows筛选器 编辑:程序博客网 时间:2024/04/29 16:06
看到此题,首先想到的是递归求解,但是题意理解错了,题中是说需要n 步到达山顶,每一次可以是一步或者两步,而我理解的是n次中每一次可以是一步或者两步
错误的递归代码如下
class Solution {public: int climbStairs(int n) { num = 0; if(n==0) return num; climbStairsHelper(n); return num; } void climbStairsHelper(int n) { if(n==0) { num++; return; } //choose 1 step climbStairsHelper(n-1); //choose 2 step climbStairsHelper(n-1); } private: int num;};
class Solution {public: int climbStairs(int n) { if(n==0) return 0; if(n==1) return 1; return climbStairs(n-1)+climbStairs(n-2); }};
一般情况下递归算法超时后,可以利用动态规划来解决,保留中间结果
动态规划的代码如下 通过
class Solution {public: int climbStairs(int n) { vector<int> result(n+1, 0); if(n==0) return result[n]; result[0] = 1; result[1] = 1; for(int i = 2; i <= n; ++i) result[i] = result[i-1] + result[i-2]; return result[n]; }};
分析代码注意到,其实每次只用了三个变量
优化后的动态规划代码
class Solution {public: int climbStairs(int n) { if(n==0) return 0; int a = 1; int b = 1; int c = 1; for(int i = 2; i <= n; ++i) { c = a + b; a = b; b = c; } return c; }};
0 0
- LeetCode: Climbing Stairs
- LeetCode: Climbing Stairs
- [LeetCode]Climbing Stairs
- LeetCode Climbing Stairs
- [Leetcode] Climbing Stairs
- Leetcode: Climbing stairs
- LeetCode Climbing Stairs
- [LeetCode] Climbing Stairs
- leetcode 107: Climbing Stairs
- [LeetCode] Climbing Stairs
- [LeetCode]Climbing Stairs
- [leetcode]Climbing Stairs
- LeetCode-Climbing Stairs
- [leetcode] Climbing Stairs
- LeetCode - Climbing Stairs
- LeetCode:Climbing Stairs
- Leetcode Climbing Stairs
- LeetCode | Climbing Stairs
- HDU2048 数塔
- 小米试题 数组其他元素乘积
- java--家庭电视类
- SQLite3::BusyException: database is locked:
- js获取项目根路径
- leetcode Climbing Stairs
- SDUTOJ 2780 ——Pots BFS
- 周期串。输入一个长度不超过80的串,输出它的最小周期。
- C语言基础用基本的循环语句打印实心和空心菱形、九九乘法表
- Web学习笔记1——几个名词
- XML文件格式简介
- Apache Camel框架之Freemarker做数据转换
- BaseDao....
- 关于select下拉框选择触发事件