leetcode数组之Climbing Stairs(同剑指offer T9)
来源:互联网 发布:洛阳管家婆软件 编辑:程序博客网 时间:2024/06/06 14:29
题目】
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步。每一次你都可以爬一步或者爬两步,问有多少种方式爬到楼顶?
(斐波那契数列应用:一个青蛙一次可以跳上1阶台阶,也可以跳上2阶台阶.求该青蛙跳上一个n阶台阶有多少跳法)
设 f (n) 表示爬 n 阶楼梯的不同方法数,为了爬到第 n 阶楼梯,有两个选择:
• 从第 n - 1 阶前进 1 步;
• 从第 n - 2 阶前进 2 步;
因此,有 f (n) = f (n - 1) + f (n - 2)。
这是一个斐波那契数列。
//方法一:递归;计算量随着n的增大急剧增大,即时间复杂度是以n的指数方式增长的class Solution{public: int climbStairs(int n) { return fibonacci(n); } private: int fibonacci(int n) { if(n<=2) return n; else return fibonacci(n-1)+fibonacci(n-2); }};//方法二:迭代;时间复杂度 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+cur; 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)+0.5)/s); }};
扩展:一只青蛙一次可以跳上1级台阶,2级台阶,···,n级台阶,则青蛙跳上一个n级台阶共有多少种跳法;
//方法一:总结可得法f(n)=2^(n-1);int climbStairs(int n){ if(n==0) return 0; int fn=(1<<(n-1)); return fn;} //方法二:迭代;f(n)=f(n-1)+f(n-2)+···+f(1)+1;#include<iostream>using namespace std;int climbStairs(int n){ if(n==0) return 0; if(n==1) return 1; int fn=1; for(int i=2;i<=n;i++) { int tmp=fn; fn=fn+tmp; tmp=fn; } return fn;}
0 0
- leetcode数组之Climbing Stairs(同剑指offer T9)
- 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 (方法2)
- LeetCode之旅(16)-Climbing Stairs
- [leetcode] 【数组】70. Climbing Stairs
- LeetCode之7 Climbing Stairs
- LeetCode(70) Climbing Stairs
- LeetCode(70) Climbing Stairs
- leetcode 虐我篇之(二十一)Climbing Stairs
- LeetCode OJ 之 Climbing Stairs ( 爬楼梯 )
- LeetCode | Climbing Stairs(爬楼梯)
- 智能制造的十大原则
- 汉语——世界上唯一的面向对象语言
- 采集新浪微博
- JAVA 中 Redis与ehcache对比与使用
- [Lpp] PHP的文件上传和下载
- leetcode数组之Climbing Stairs(同剑指offer T9)
- A1071.Speech Patterns
- 报错(Error:Configuration with name 'default' not found.)
- MongoDB基础操作
- Integer和int大小比较
- 将ipynb文件转换为pdf
- Linux环境Hadoop2.8.0搭建(单机模式-伪分布式模式)
- 大一春季联赛,dfs简单题(思路)
- 限制费用的最短路 例题:poj 1724