LeetCode 70. Climbing Stairs (O(n)时间, O(1)空间实现)
2014-07-12 07:23
429 查看
爬梯子,一次爬1步或2步,欲到达第n步,有几种爬法。
在第i级梯子时,可以从第i-2级梯子爬两次1步;或者从第i-1级梯子爬一次1步。所以dp[i] = dp[i-2] + dp[i-1].
其实这是个斐波那契数列。(dp[0], dp[1]初始化为1)
更省空间的做法是设置prev, prevv两个参数,记录前两项的数值,当前项ret = prev + prevv即可。
代码:
在第i级梯子时,可以从第i-2级梯子爬两次1步;或者从第i-1级梯子爬一次1步。所以dp[i] = dp[i-2] + dp[i-1].
其实这是个斐波那契数列。(dp[0], dp[1]初始化为1)
更省空间的做法是设置prev, prevv两个参数,记录前两项的数值,当前项ret = prev + prevv即可。
代码:
class Solution { public: int climbStairs(int n) { int prev=1, prevv=1, ret=1; for (int i = 2; i <= n; ++ i) { ret = prev + prevv; prevv = prev; prev = ret; } return ret; } };
相关文章推荐
- [LeetCode] Candy (分糖果),时间复杂度O(n),空间复杂度为O(1),且只需遍历一次的实现
- [LeetCode] Candy (分糖果),时间复杂度O(n),空间复杂度为O(1),且只需遍历一次的实现
- LeetCode 135. Candy (O(n)时间 O(n)和O(1)空间的两种实现)
- LeetCode 73. Set Matrix Zeroes (O(nm)时间 O(1)空间实现)
- Candy [leetcode] O(n)时间复杂度,O(1)空间复杂度的方法
- LeetCode: Longest Valid Parentheses O(n)时间 O(1)空间
- C/C++用匿名数据结构实现时间和空间名利双收
- C/C++用匿名数据结构实现时间和空间名利双收
- 时间O(n)/空间O(1)实现长n字符串前m个移到末尾
- Leetcode 238 Product of Array Except Self 时间O(n)和空间O(1)解法
- (C#)实现时间复杂度为O(n)空间复杂度为O(1)的数组中奇偶数分离
- Candy [leetcode] O(n)时间复杂度,O(1)空间复杂度的方法
- [LeetCode] Set Matrix Zeroes (!!!!时间空间复杂度)
- swap实现(优化空间和时间),及其带来的问题
- LeetCode --- 70. Climbing Stairs
- 用JAVA实现:非递归算法在O(n)时间内将一个含有n个元素的单链表逆置,要求其辅助空间为常量
- bsd strtok实现和windowstrtok实现 NetBSD的方法是节约了空间,牺牲了时间(它的时间复杂度为N2) 而微软的方法是节约了时间(它的时间复杂度为N),牺牲了空间(开了一
- [Leetcode][Rotate Array]一种对连续内存空间进行的循环移位的巧妙解法(O(1)的空间、O(n)的时间)
- Oracle技术之手动实现表空间基于时间点的恢复
- 给定一个单向链表(长度未知),请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素。实现这个算法,并为可能出现的特例情况安排好处理措施。“倒数第m个元素”是这样规定的:当m=0时,链表的