LeetCode 70. Climbing Stairs
来源:互联网 发布:for循环遍历二维数组 编辑:程序博客网 时间:2024/06/05 19:20
描述
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.
分析
设 f (n) 表示爬 n 阶楼梯的不同方法数,为了爬到第 n 阶楼梯,有两个选择:
• 从第n−1阶前进1步;
• 从第n−1阶前进2步;
这是一个斐波那契数列。
方法 1:递归,太慢;
方法 2:迭代,也可以看作动态规划。
方法3:数学公式。斐波那契数列的通项公式为
代码
// 迭代,时间复杂度 O(n),空间复杂度 O(1)class Solution {public: int climbStairs(int n) { int prev = 0; int cur = 1; for (int i = 1; i <= n; ++i) { int tmp = cur; cur += prev; prev = tmp; } return cur; }};
// 数学公式,时间复杂度O(1),空间复杂度O(1)class Solution {public: int climbStairs(int n) { const double s = sqrt(5); return floor((pow((1+s)/2, n+1) - pow((1-s)/2, n+1)) / s ); }};
0 0
- [LeetCode]70.Climbing Stairs
- LeetCode --- 70. Climbing Stairs
- [Leetcode] 70. Climbing Stairs
- [leetcode] 70.Climbing Stairs
- [leetCode]70. Climbing Stairs
- 70. Climbing Stairs LeetCode
- [LeetCode]70. Climbing Stairs
- 【LeetCode】70. Climbing Stairs
- leetcode 70. Climbing Stairs
- leetcode 70. Climbing Stairs
- LeetCode *** 70. Climbing Stairs
- 【LeetCode】70. Climbing Stairs
- LeetCode 70. Climbing Stairs
- leetcode 70. Climbing Stairs
- [LeetCode]70. Climbing Stairs
- 【LeetCode】70. Climbing Stairs
- LeetCode 70. Climbing Stairs
- #leetcode#70.Climbing Stairs
- 编译Android内核 For nexus 5 以及绕过Android的反调试
- Lock与synchronized 的区别
- 操作系统笔记<一>之操作系统概述
- Linux时间系统:时钟源clocsource
- OJ 7219 复杂的整数划分问题__动态规划
- LeetCode 70. Climbing Stairs
- eAndriod学习一:IDE、ADT、SDK、JDK
- 算法训练 最大最小公倍数
- if exists和if not exists关键字用法
- SpringMVC整合Mybatis报错org.springframework.web.util.NestedServletException: Request processing failed;
- SSH整合
- Bootstrap学习笔记(二)排版
- python UnicodeEncodeError解决方法
- 《算法竞赛入门经典》7.4回溯法