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.爬楼梯的更多相关文章

  1. LeetCode 70. 爬楼梯(Climbing Stairs)

    70. 爬楼梯 70. Climbing Stairs 题目描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意: 给定 ...

  2. LeetCode 70 - 爬楼梯 - [递推+滚动优化]

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2输出: 2解释: 有两种方 ...

  3. Leetcode 70.爬楼梯 By Python

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两 ...

  4. [每日一题2020.06.14]leetcode #70 爬楼梯 斐波那契数列 记忆化搜索 递推通项公式

    题目链接 题意 : 求斐波那契数列第n项 很简单一道题, 写它是因为想水一篇博客 勾起了我的回忆 首先, 求斐波那契数列, 一定 不 要 用 递归 ! 依稀记得当年校赛, 我在第一题交了20发超时, ...

  5. 力扣(LeetCode)70. 爬楼梯

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两 ...

  6. 【LeetCode】70. 爬楼梯

    爬楼梯 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意: 给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解 ...

  7. Leetcode题目70.爬楼梯(动态规划+递归-简单)

    题目描述: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 ...

  8. LeetCode 题解 | 70. 爬楼梯

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两 ...

  9. leetcode刷题-70爬楼梯

    题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 思路 最开始使用的是回溯的方法,但是时间效 ...

  10. 【Leetcode】爬楼梯

    问题: 爬n阶楼梯,每次只能走1阶或者2阶,计算有多少种走法. 暴力计算+记忆化递归. 从位置 i 出发,每次走1阶或者2阶台阶,记录从位置 i 出发到目标 n 所有的走法数量,memoA[i] .记 ...

随机推荐

  1. Centos7使用docker搭建gitlab服务器

    了解到docker的优点,搭建快,运行要求资源低,最重要的是实现的功能和效果都能达到预期,于是决定使用docker来搭建gitlab服务器. 效果图如下: 系统环境:CentOS Linux rele ...

  2. for循环输出空心菱形的形状【java】

    使用for循环语句输出以下“空心菱形”效果: * * * * * * * * * * * * * * * * 建议优先参考笔者的另一篇文章:<for循环输出菱形的形状[java]> 代码: ...

  3. 【EF6学习笔记】(六)创建复杂的数据模型

    本篇原文地址:Creating a More Complex Data Model 本篇讲的比较碎,很多内容本人认为并不是EF的内容,既然原文讲了,那就按照原文来学习吧... 第1步:通过属性来定制化 ...

  4. MODIS数据的下载(新地址)

    Modis数据下载方法 1.1打开网址 浏览器输入地址:https://ladsweb.nascom.nasa.gov/search 注:需要一定的等待时间,如果一直打不开,就需要FQ.(网址加载了g ...

  5. C#多线程的几种方法详解示例

    这里主要介绍了c#使用多线程的几种方式,通过示例学习c#的多线程使用方式,大家参考使用吧! 1 进程.线程.同步.异步的概念 2 回顾委托,开始异步 3 异步多线程的三大特点 异步多线程都觉得很厉害, ...

  6. mybatis逆向工程(MyBatis Generator)

    mybatis逆向工程(MyBatis Generator) 1. 什么是mybatis逆向工程 mybatis官方为了提高开发效率,提高自动对单表生成sql,包括 :mapper.xml.mappe ...

  7. MyBatis学习总结(一)——ORM概要与MyBatis快速起步

    程序员应该将核心关注点放在业务上,而不应该将时间过多的浪费在CRUD中,多数的ORM框架都把增加.修改与删除做得非常不错了,然后数据库中查询无疑是使用频次最高.复杂度大.与性能密切相关的操作,我们希望 ...

  8. SQL Server 分页编号的另一种方式

    今天看书讲T-SQL,看到了UNBOUNDED PRECEDING,就想比对下ROW_NUMBER()的运行速度. sql及相关的结果如下,数据库中的数据有5W+. ROW_NUMBER(): SET ...

  9. EF C# ToPagedList方法 The method 'Skip' is only supported for sorted input in LINQ to Entities. The method 'OrderBy' must ……

    报错信息:The method 'Skip' is only supported for sorted input in LINQ to Entities. The method 'OrderBy' ...

  10. Java_HashMap使用思路

    一.HashMap的应用思路 使用: Map,Set集合,String的split切割方法 ,增强for循环  使用思路:为所有key创建容器,之后容器中存放对应value 二.实现示例代码 1.两个 ...