70. 爬楼梯

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/climbing-stairs
——————————————————————————————————————
1、暴力解法
创建一个模拟每次爬楼梯的情况的函数climb,将所有情况遍历一遍,但暴力解法存在超时的情况。C++代码如下:

class Solution {
public:int climb(int i,int n)     #模拟爬楼梯的函数{if(i>n)     #如果爬的楼梯数超过要求的楼梯数,则返回0return 0;if(i==n)      #如果爬的楼梯数等于要求的楼梯书,则返回1return 1;return climb(i+1,n) + climb(i+2,n);     #如果不符合上面两个条件,则递归执行climb()函数}int climbStairs(int n) {return climb(0,n);     #调用climb()函数,返回符合要求的方法的个数}
};

——————————————————————————————————————
2、动态规划
使用动态规划,如果要爬n阶楼梯,则前一个阶段是已经爬了n-1阶楼梯或者n-2阶楼梯,则爬n阶楼梯的方法数num(n)=num(n-1)+num(n-2);可以通过不断的迭代,找到符合情况的num(n),C++代码如下:

class Solution {
public:int climbStairs(int n) {vector<int> dp;     #创建一个容器dpdp.push_back(1);     #存储第一个数据,该数据表示一阶楼梯的所有情况dp.push_back(2);     #存储第二个数据,该数据表示二阶楼梯的所有情况for(int i=3;i<=n;i++)     #对于第三个数据到第n个数据{dp.push_back(dp[i-2]+dp[i-3]);     #分别为第i个数据的前面两个数据}return dp[n-1];     #返回符合要求的最后一个数据}
};

——————————————————————————————————————
3、斐波那契数
上面动态规划提到了用前一阶段的情况去分析下一阶段的方法,这恰好也就是斐波那契数的情况,因此使用f(n)=f(n-1)+f(n-2),可以得到以下C++代码:

class Solution {
public:int climbStairs(int n) {if(n==1)return 1;int one=1;int two=2;for(int i=3;i<=n;i++){int three = one + two;one = two;two = three;}return two;}
};

leetcode - 70. 爬楼梯相关推荐

  1. LeetCode 70爬楼梯71简化路径72编辑距离(dp)

    新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注这个潇洒青年一起飞,回 ...

  2. Python描述 LeetCode 70. 爬楼梯

    Python描述 LeetCode 70. 爬楼梯   大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术博文,主要包括前端开发.pyt ...

  3. 变形版汉诺塔:LeetCode:70爬楼梯

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

  4. LeetCode 70. 爬楼梯 (递归斐波那契 | 动态规划)

    70. 爬楼梯 解法1 (暴力递归) 推出递推式子:f(n) = f(n - 1) + f(n - 2) 是一个斐波那契数列,用递归 class Solution {public int climbS ...

  5. LeetCode - 70. 爬楼梯(人肉递归、动态规划)2

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

  6. Leetcode 70.爬楼梯

    Time: 20190904 Type: Easy 考察:动态规划 题目描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注 ...

  7. Leetcode 70. 爬楼梯 动态规划 c语言

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

  8. 84. Leetcode 70. 爬楼梯 (动态规划-基础题)

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

  9. leetcode 70. 爬楼梯(C语言)

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

最新文章

  1. 原生js自动完成 [转]
  2. 组策略 之 驱动器映射
  3. scala学习笔记-基础语法(1)
  4. java提取图片中的文字,深入分析
  5. fastai学习:05_pet_breeds Questionnaire
  6. 迭代器协议、斐波那契数列
  7. Ansible结合跳板机控制远程服务器
  8. kotlin 复制对象属性_Kotlin 怎么学 ?遇到过哪些坑?
  9. 读书_w3c架构师01通用设计与方法论
  10. 使用ENVI5.3构建时序数据展示
  11. RS编码过程通俗理解
  12. 2021SC@SDUSC Zxing开源代码(十六)PDF417二维码(二)
  13. OSChina 周二乱弹 ——深入浅出微信小程序
  14. Android App Bundle: 最新改进和 Google Play 新应用计划
  15. python中反差分操作
  16. macos 10.15 软件损坏/无法验证开发者
  17. 2023Mac装机系统优化软件CleanMyMacX
  18. 【shell】【sed】在行前/行后插入一新行
  19. 调用系统相机和相册出现闪退报错No Activity found to handle Intent
  20. 数学笔记28——不定式和洛必达法则

热门文章

  1. Exchange 企业邮件与Windows安全应用 — Exchange 2007 收件人管理
  2. NGINX Plus集成fail2ban进行动态IP黑名单配置
  3. Spring ActiveMQ教程
  4. MTU(Maximum Transmission Unit),最大传输单元
  5. linux下svn(subversion)服务端添加工程及配置权限
  6. 利用Git查看项目代码总行数
  7. yarn publish错误
  8. 弹出框 背景固定 滑动
  9. C#LeetCode刷题之#455-分发饼干(Assign Cookies)
  10. python标准库之smtplib,poplib,imaplib,smptd