问题描述

假设你正在爬楼梯。需要 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 阶

解题思路

如果要走n阶楼梯,第一次可以走1步或者2步,接下来继续走n-1或者n-2步。

很明显的斐波拉契数列,T(n)=T(n-1)+T(n-2),递归和循环都可以很容易的实现。

不过还是建议用循环解决,毕竟递归解决的话时间复杂度是O((1.618)^n),时间开销太大。

循环解决的话,分析易得时间复杂度为O(n),空间复杂度为O(1)。

C++代码

class Solution {
public:
int climbStairs(int n) {
if(n<1)
return 0;
else if(n==1)
return 1;
else if(n==2)
return 2; //T(n)=T(n-1)+T(n-2)
//斐波拉契数列循环实现
int fibOne=1;
int fibTwo=2;
int fibFinal=0;
for(int index=3;index<n+1;++index){
fibFinal=fibOne+fibTwo;
fibOne=fibTwo;
fibTwo=fibFinal;
} return fibFinal;
}
};

运行结果

LeetCode第70题:爬楼梯的更多相关文章

  1. LeetCode 第70题动态规划算法

    导言 看了 动态规划(https://www.cnblogs.com/fivestudy/p/11855853.html)的帖子,觉得写的很好,记录下来. 动态规划问题一直是算法面试当中的重点和难点, ...

  2. 【leetcode 简单】第十八题 爬楼梯

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

  3. 2017广东工业大学程序设竞赛C题爬楼梯

    Description 小时候,我只能一阶一阶得爬楼梯, 后来,我除了能一次爬一阶,还可以一次爬两阶, 到现在,我最多一次可以爬三阶. 那么现在问题来了,我想爬上n层楼,相邻楼层之间有一段楼梯,虽然我 ...

  4. LeetCode No.70,71,72

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

  5. leetcode刷题-70爬楼梯

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

  6. [LeetCode] 70. Climbing Stairs 爬楼梯问题

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

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

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

  8. Leetcode#70. Climbing Stairs(爬楼梯)

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

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

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

随机推荐

  1. PHP JSON文件解析并获取key、value,判断key是否存在

    /****************************************************************************** * PHP JSON文件解析并获取key ...

  2. php 利用header 函数 下载各种文件

    http://www.php.net/manual/en/function.readfile.php <?php /** * 下载文件 * header函数 * */ dl_file($_GET ...

  3. Python函数-callable()

    callable(object) 作用: 检查对象object是否可调用.如果返回True,object仍然可能调用失败:但如果返回False,调用对象ojbect绝对不会成功. 注意: 类是可调用的 ...

  4. Sentry深入

    Sentry的架构 内部架构 核心就是规则引擎以及Metadata Store:记录格式有两种,一种policy file记录授权内容,另外一种是通过命令方式进行授权:前者记录在策略文件中,保存形式是 ...

  5. CentOS7 yum安装mysql5.5/5.6并初始化

    https://blog.csdn.net/petrel2015/article/details/78822466 下载MySQL yum仓库文件 首先根据官网给出的建议,下载MySQL的仓库文件 h ...

  6. 日志分隔工具Cronolog

    注:本文转载自 https://blog.csdn.net/weixin_38860565/article/details/81633234 Cronolog 分割 Tomcat8 Catalina. ...

  7. git ssh登录

    .ssh下创建config文件 其内容: Host ipIdentityFile ~/.ssh/私钥文件名Port 22User git服务器的账号,不是git账号名(私钥文件名才是git账号名) 注 ...

  8. 增加 [确定] and [失败]系统提示

    增加 [确定] and  [失败]系统提示 #!/bin/bash. /etc/init.d/functionsaction "true" /bin/falseaction &qu ...

  9. microsoft windows network 不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接

    运行CMD在命令行中运行net use * /del /y 命令中断开所有连接最后,你再次访问 ,就不会有问题了. 而且可以连接多个samba用户.

  10. OracleParameter中参数名必须是DB中已有字段:【 ORA-01745: 无效的主机/绑定变量名】

    错误例子: 错误原因:查询的变量是自己随便命名的,不是数据库表中已有的字段, 因此,在进行OracleParameter(":rownum",10)时,在数据库中无法自动进行字段匹 ...