leetcode-70.爬楼梯
leetcode-70.爬楼梯
Points
- 斐波那契
- 动态规划
题意
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶示例 2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶示例 3:
输入: 4
输出: 5
解释: 有五种方法可以爬到楼顶。
1. 1 1 1 1
2. 2 1 1
3. 1 2 1
4. 1 1 2
5. 2 2
算法
本题算法思想参考自 https://www.cnblogs.com/k-li/p/5543108.html 精辟!
算一下前几个结果,我们会发现这样的规律 1 2 3 5 8 13 21 34 55 ......
即 cliimbStairs(n) = cliimbStairs(n-1) + cliimbStairs(n-2);
code
最近更新的代码
 class Solution {
 public:
     //递归方法:递归很可能要栈溢出
     int jumpFloor1(int n) {
         if(n == )
             return ;
         if(n == )
             return ;
         if(n == )
             return ;
         return jumpFloor(n-)+jumpFloor(n-);
     }
     //非递归版的,运行时间也很快
     int jumpFloor(int n)
     {
         if(n == )
             return ;
         if(n == )
             return ;
         if(n == )
             return ;
         int a = , b = ;
         int res;
         for(int i=; i<=n; i++)
         {
             res = a + b;
             a = b;
             b = res;
         }
         return res;
     }
     //如果是一步可以爬2/3级呢
     int jumpFloor2_3(int n)
     {
         if(n <= )
             return ;
         if(n == )
             return ;
         if(n == )
             return ;
         int a = , b = , c = ;
         int res = ;
         for(int i=; i<=n; i++)
         {
             res = a + b;
             a = b;
             b = c;
             c = res;
         }
         return res;
     }
 };
下面是远古(垃圾)代码
 class Solution {
 public:
     int climbStairs(int n) {
         if(n == )
             return ;
         else if(n == )
             return ;
         int n1 = , n2 = , ans = ;
         for(int i=; i<=n; i++)
         {
             ans = n1 + n2;
             n2 = n1;
             n1 = ans;
         }
         return ans;
     }
 };
后来重写了一次,精简了一些!(不要用较大数比如50去测试,int 已经爆了。既然给的是int返回值,证明样例较小。)
 class Solution {
 public:
     int climbStairs(int n) {
         if(n < )
             return n;
         long res = ;
         int i = , a = , b = ;
         while((i++) <= n)
         {
             res = a + b;
             a = b;
             b = res;
         }
         return res;
     }
 };
leetcode-70.爬楼梯的更多相关文章
- LeetCode 70. 爬楼梯(Climbing Stairs)
		70. 爬楼梯 70. Climbing Stairs 题目描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意: 给定 ... 
- LeetCode 70 - 爬楼梯 - [递推+滚动优化]
		假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2输出: 2解释: 有两种方 ... 
- Leetcode 70.爬楼梯 By Python
		假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两 ... 
- [每日一题2020.06.14]leetcode #70 爬楼梯 斐波那契数列 记忆化搜索 递推通项公式
		题目链接 题意 : 求斐波那契数列第n项 很简单一道题, 写它是因为想水一篇博客 勾起了我的回忆 首先, 求斐波那契数列, 一定 不 要 用 递归 ! 依稀记得当年校赛, 我在第一题交了20发超时, ... 
- 力扣(LeetCode)70. 爬楼梯
		假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两 ... 
- 【LeetCode】70. 爬楼梯
		爬楼梯 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意: 给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解 ... 
- Leetcode题目70.爬楼梯(动态规划+递归-简单)
		题目描述: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 ... 
- LeetCode 题解 | 70. 爬楼梯
		假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两 ... 
- leetcode刷题-70爬楼梯
		题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 思路 最开始使用的是回溯的方法,但是时间效 ... 
- 【Leetcode】爬楼梯
		问题: 爬n阶楼梯,每次只能走1阶或者2阶,计算有多少种走法. 暴力计算+记忆化递归. 从位置 i 出发,每次走1阶或者2阶台阶,记录从位置 i 出发到目标 n 所有的走法数量,memoA[i] .记 ... 
随机推荐
- 删除github上面的项目
			1.进入github 2.点击Repositories,看到你所有的repository 3.点击进入你想要删除的repository,点击settings 4.在options选项中,下拉到底看到“ ... 
- eos开发(一) eos开发环境搭建
			区块链最近挺火的,我又是个非常缺钱的人,所以紧跟了潮流一头扎进区块链的研究中. 这EOS项目是目前比较火的一个项目,相信很多朋友拿到这份EOS的源代码后都会一脸懵逼,因为……这代码写得太高级了,老纸看 ... 
- Ubuntu安装Python2.7,nodejs,Redis
			安装Python2.7 sudo add-apt-repository ppa:fkrull/deadsnakes-python2.7sudo apt-get update sudo apt-get ... 
- conda添加多个版本的python
			在conda下,新添加一个python环境,如下再添加一个python3.6conda create --name py36 python=3.6然后通过source activate py36来激活 ... 
- yii学习笔记--url解析
			在通过yiic命令生成了一个app之后,我们通过浏览器访问会看到这样的一个页面. 点击home时,url为:http://localhost/blog/index.php?r=site/index ... 
- java模式—装饰者模式
			装饰者模式 1.意图: 动态地给一个对象添加一些额外的职责.就增加功能来说, Decorator模式相比生成子类更为灵活.该模式以对客 户端透明的方式扩展对象的功能. 2.适用环境 (1)在不影响其他 ... 
- mysql 开发基础系列20 事务控制和锁定语句(上)
			一.概述 在mysql 里不同存储引擎有不同的锁,默认情况下,表锁和行锁都是自动获得的,不需要额外的命令, 有的情况下,用户需要明确地进行锁表或者进行事务的控制,以便确保整个事务的完整性.这样就需要使 ... 
- Android中getDrawable和getColor过时的替代方法
			版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 Android SDK 升级到 23 之后,getDrawable和getColor方法提示过时. 解决方案 getResources(). ... 
- 微信小程序:防止多次点击跳转(函数节流)和防止表单组件输入内容多次验证(函数防抖)
			一.函数节流(throttle) **函数节流:一个函数执行一次后,只有大于设定的执行周期后才会执行第二次**.有个需要频繁触发函数,出于优化性能角度,在规定时间内,只让函数触发的第一次生效,后面不生 ... 
- 微信支付之手机H5支付实践
			最近项目中支付部分涉及到微信支付,使用的是h5支付,官方文档中是没有demo的,所以摸着石头过河,将踩过的坑记录如下. 一 应用场景 H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前 ... 
