leetcode - 70. 爬楼梯
70. 爬楼梯
——————————————————————————————————————
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
示例 2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
- 1 阶 + 1 阶 + 1 阶
- 1 阶 + 2 阶
- 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. 爬楼梯相关推荐
- LeetCode 70爬楼梯71简化路径72编辑距离(dp)
新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注这个潇洒青年一起飞,回 ...
- Python描述 LeetCode 70. 爬楼梯
Python描述 LeetCode 70. 爬楼梯 大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术博文,主要包括前端开发.pyt ...
- 变形版汉诺塔:LeetCode:70爬楼梯
70. 爬楼梯 题目链接:70:爬楼梯 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1 ...
- LeetCode 70. 爬楼梯 (递归斐波那契 | 动态规划)
70. 爬楼梯 解法1 (暴力递归) 推出递推式子:f(n) = f(n - 1) + f(n - 2) 是一个斐波那契数列,用递归 class Solution {public int climbS ...
- LeetCode - 70. 爬楼梯(人肉递归、动态规划)2
70 . 爬楼梯 题目: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 ...
- Leetcode 70.爬楼梯
Time: 20190904 Type: Easy 考察:动态规划 题目描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注 ...
- Leetcode 70. 爬楼梯 动态规划 c语言
假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数.示例 1: 输入: 2 输出: 2 解释: 有两种 ...
- 84. Leetcode 70. 爬楼梯 (动态规划-基础题)
假设你正在爬楼梯.需要 n 阶你才能到达楼顶.每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢?示例 1:输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶. 1. 1 阶 ...
- leetcode 70. 爬楼梯(C语言)
题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: ...
最新文章
- 原生js自动完成 [转]
- 组策略 之 驱动器映射
- scala学习笔记-基础语法(1)
- java提取图片中的文字,深入分析
- fastai学习:05_pet_breeds Questionnaire
- 迭代器协议、斐波那契数列
- Ansible结合跳板机控制远程服务器
- kotlin 复制对象属性_Kotlin 怎么学 ?遇到过哪些坑?
- 读书_w3c架构师01通用设计与方法论
- 使用ENVI5.3构建时序数据展示
- RS编码过程通俗理解
- 2021SC@SDUSC Zxing开源代码(十六)PDF417二维码(二)
- OSChina 周二乱弹 ——深入浅出微信小程序
- Android App Bundle: 最新改进和 Google Play 新应用计划
- python中反差分操作
- macos 10.15 软件损坏/无法验证开发者
- 2023Mac装机系统优化软件CleanMyMacX
- 【shell】【sed】在行前/行后插入一新行
- 调用系统相机和相册出现闪退报错No Activity found to handle Intent
- 数学笔记28——不定式和洛必达法则
热门文章
- Exchange 企业邮件与Windows安全应用 — Exchange 2007 收件人管理
- NGINX Plus集成fail2ban进行动态IP黑名单配置
- Spring ActiveMQ教程
- MTU(Maximum Transmission Unit),最大传输单元
- linux下svn(subversion)服务端添加工程及配置权限
- 利用Git查看项目代码总行数
- yarn publish错误
- 弹出框 背景固定 滑动
- C#LeetCode刷题之#455-分发饼干(Assign Cookies)
- python标准库之smtplib,poplib,imaplib,smptd