【LeetCode】70. Climbing Stairs
来源:互联网 发布:车载gps数据库后台安装 编辑:程序博客网 时间:2024/04/28 06:27
70. Climbing Stairs
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?
【分析】
题意:爬一个有n级阶梯的楼梯,每一步只能上一级或者两级,问一共有多少种不同爬楼方式。
这个题很简单,本质上就是一个“斐波拉契数列”,我们欲到达第n级台阶,上一步需要到达第n-1级或者n-2级,那么达到第n级的方式总数就等于到达第n-1级和第n-2级方式的和:F(n)=F(n-1)+F(n-2),n>2;F(1)=1;F(2)=2;很明显,这就是斐波拉契数列。
对于斐波拉契数列的求解,教科书上一般采用的是“递归”求解,程序虽然简洁,但是效率并不高,并且当n比较大时,递归方式用到的“栈”存储结构可能溢出。效率不高的原因在于重复计算过多,比如欲求F(n)=F(n-1)+F(n-2),需递归求F(n-1)=F(n-2)+F(n-3)和F(n-2)=F(n-3)+F(n-4),明显,F(n-2)、F(n-3)被重复求解,依次递推,会出现大量的重复求解部分,极大的降低了效率。因此,我们可对此算法进行改进,采用顺序求解方式:即,从自底向上求解,F(1),F(2),F(3),F(4),...,F(n),如是,便不会出现重复求解的部分。
【解法及注释】
方法一:“递归”求解(会超时)
class Solution {public: int climbStairs(int n) { int F1=1; int F2=2; if(n<=0)return 0; else if(n==1)return 1; else if(n==2)return 2; else if(n>2) { return climbStairs(n-1)+climbStairs(n-2); } }};
方法二:“顺序”求解
class Solution {public: int climbStairs(int n) { int F1=1; int F2=2; int Fn=0; if(n<=0)return 0; else if(n==1)return 1; else if(n==2)return 2; else if(n>2) { for(int i=3;i<=n;i++) { Fn=F1+F2; F1=F2; F2=Fn; } } return Fn; }};
- [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
- 扩展的欧几里德算法求乘法逆元
- QT4.8.2+VS2010支持中文
- 重构Oc的get,set方法
- 悲观锁和乐观锁
- Viterbi编译码
- 【LeetCode】70. Climbing Stairs
- 菜鸟学人工神经网络(C++11实现)零:矩阵类
- POI操作Excel常用方法总结(2003的excel)
- hiho一下 第十八周 RMQ问题再临
- POJ 2112 Optimal Milking 最大流 二分答案
- memcached实战系列(五)Memcached: List all keys 查询所有的key
- Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)
- 换行问题
- ORACLE 序列sequence小结