首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Leetcode 题目解析:70. 爬楼梯

Leetcode 题目解析:70. 爬楼梯

作者头像
程序员架构进阶
发布于 2021-11-04 08:02:41
发布于 2021-11-04 08:02:41
39900
代码可运行
举报
文章被收录于专栏:架构进阶架构进阶
运行总次数:0
代码可运行

系列文章:

算法题目解析:从一道题目看动态规划

Leetcode 题目解析:274. H 指数

Leetcode 题目解析:279. 完全平方数

Leetcode 题目解析:287. 寻找重复数

Leetcode 题目解析:211. 添加与搜索单词 - 数据结构设计

一 摘要

在前面算法题目解析:从一道题目看动态规划这篇文章中,描述了动态规划的概念、原理和典型示例,今天用几道典型的动态规划题目来做为练手,达到掌握的目的。70. 爬楼梯是一道简单题,但比较典型,先从它开始。

二 题目描述与示例

2.1 描述

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

2.2 示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:3
输出:3
解释:有三种方法可以爬到楼顶。
1.  1+ 1+ 12.  1+ 23.  2+ 1

三 解析

3.1 题目解析

题目比较清晰,要爬n阶楼梯,每次可选向上1/2个台阶,计算所有可能。如果我们从最后一次的选择倒推,f(n)表示到达第n个台阶的可能方法数,那么就可以很容易得到f(n) = f(n-1)+f(n-2)。

3.2 解法思路

3.2.1 动态规划

我们先再回顾一下动态规划算法:动态规划算法通常基于一个递推公式(状态转移方程)和一个或多个初始状态。当前子问题的解将由上一次子问题的解推导而出。很显然,题目符合这个特征。因此可以使用动态规划的方法。

3.2.2 准备条件

在使用动态规划算法解题时,需要我们给出两个内容:(1)状态转移方程,(2)明确边界条件。

(1)比较容易,f(n) = f(n-1)+f(n-2)就是我们这个场景的状态转移方程;

(2)边界条件,因为状态转移方程需要先知道f(n-1)和f(n-2),所以说递推的计算只能从f(2)开始,并初始化f(0)和f(1)的值。f(0)和f(1)就是这道题目的边界。我们是从0阶开始向上爬,爬到第0层,可以看做只有一种方法;从第0阶到第1阶也只有一种方法(即只爬1个台阶),故f(1)=1。

3.2.3 实现方法

有了状态转移方程和边界条件,我们就可以向下推最终结果。比较容易想到的是,从2到n执行遍历,逐个计算f(i)并存储结果,直到计算到f(n)为止。一次遍历,存储n个中间和最终结果,所以时间复杂度和空间复杂度都是O(n)。

时间复杂度在当前方法下不太容易优化,但空间是否可行呢?因为每次计算时,f(i)只依赖前面两个值,所以如果我们采用滚动数组的方式,就可以把空间复杂度降低到O(1)。如果滚动数组不好理解,也可以简单地定义n_1 和 n_2两个变量,每计算一次后,更新n_1=f(i),n_2=f(i-1),下次就可以用这两个值计算f(i+1)了。

3.3 代码实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public int climbStairs(int n) {
    int p = 0, q = 0, r = 1;
    for (int i = 1; i <= n; ++i) {
        p = q; 
        q = r; 
        r = p + q;
    }
    return r;
}
代码语言:javascript
代码运行次数:0
运行
复制
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员架构进阶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode-70-爬楼梯
当n等于2的时候,可以先跳一级再跳一级,或者直接跳二级,共有2种跳法,记f(2)=2
benym
2022/07/14
2070
LeetCode-70. 爬楼梯(java)
       推演得到公式:​​dp[i] = dp[i-1] + dp[i-2]​​​ 你还可以使用​​动态规划​​来解题呀,具体思路如下:
bug菌
2023/05/27
2820
LeetCode-70. 爬楼梯(java)
leetcode 70. 爬楼梯 js实现
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?  示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶 提示: 1 <= n <= 45 原题链接 /** * @param {number} n * @return
蓓蕾心晴
2022/11/21
3610
算法之动态规划
动态规划(Dynamic Programming,简称DP)算法是一种通过将问题(比较复杂)划分为相互重叠的子问题(简单易于求解),并解决子问题来解决原问题的方法。它通常用于优化问题,其中需要找到最优解或最大/最小值。
九转成圣
2024/04/10
2620
算法之动态规划
☆打卡算法☆LeetCode 70、爬楼梯 算法解析
“假设你在爬楼梯,需要n阶到达楼顶,每次可以怕1到2阶,有多少种方法爬到楼顶呢。”
恬静的小魔龙
2022/08/07
2690
☆打卡算法☆LeetCode 70、爬楼梯  算法解析
LeetCode 70. 爬楼梯
动态规划 到达第 i 阶的方法总数就是到第 (i−1) 阶和第 (i−2) 阶的方法数之和。
freesan44
2020/03/20
4120
LeetCode 70. 爬楼梯(动态规划)
题目链接:https://leetcode-cn.com/problems/climbing-stairs/
Michael阿明
2021/02/20
3310
LeetCode 70. 爬楼梯(动态规划)
​LeetCode刷题实战70:爬楼梯
https://leetcode-cn.com/problems/climbing-stairs/
程序员小猿
2021/01/20
2590
​LeetCode刷题实战70:爬楼梯
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 阶 class Solution {
编程张无忌
2021/06/24
2820
LeetCode 70. 爬楼梯
文章目录 题目 推导归纳-斐波那契 题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 4. 1 阶 + 1 阶 + 1 阶 5. 1 阶 + 2 阶 6. 2 阶 + 1 阶 来源:力扣(LeetCode) 链
诡途
2022/05/09
2170
【leetcode刷题】T159-爬楼梯
https://leetcode-cn.com/problems/climbing-stairs/
木又AI帮
2019/09/04
3950
LeetCode | 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
yiyun
2023/03/09
3130
LeetCode | 爬楼梯
Leetcode No.70 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。
week
2022/01/07
2480
画解算法:70. 爬楼梯
https://leetcode-cn.com/problems/climbing-stairs/
灵魂画师牧码
2019/06/27
6740
画解算法:70. 爬楼梯
70 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
木瓜煲鸡脚
2021/01/18
7820
70 爬楼梯
LintCode 爬楼梯题目分析代码小结
假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?
desperate633
2018/08/22
3530
LintCode 爬楼梯题目分析代码小结
【每日leetcode】6.爬楼梯
以为真easy的我天真地用了递归,然后超时了。。。敲 ——leetcode此题热评 前言 哈喽,大家好,我是一条。 糊涂算法,难得糊涂。 今天我们爬楼梯! Question 难度:简单 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入:2 输出:2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入:3 输出:3 解释: 有三种方法可以爬到
一条coding
2021/08/12
4560
【每日leetcode】6.爬楼梯
LeetCode,Go实现爬楼梯算法
LeetCode题目源地址:https://leetcode-cn.com/problems/climbing-stairs/
微客鸟窝
2021/08/18
4330
LeetCode,Go实现爬楼梯算法
【Python动态规划】--爬楼梯
题目中说只能爬一个台阶或两个台阶 那么:爬到第N阶方法数=再 爬一个台阶的方法+再 爬两个台阶的方法 第1阶:1+0 1 第2阶:1+1 2 第3阶:2+1 3(ps:再爬一个台阶;即从第2开始爬,爬到2的方法有两种,那么这两种从2到3都是爬1阶,所以再爬一个台阶方法有两种,爬两个台阶:从1开始,到一方法只有一种,1到3阶就是再一次爬两阶) 依次类推 可以得到一个递推式;F(n)=F(n-1)+F(n-2) (F表示方法数,n表示台阶数) 即可转化为斐波拉切数列问题
云帆沧海
2024/01/17
3410
LeetCode 75 —— 70. 爬楼梯
示例 2: 输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。
Regan Yue
2023/07/10
2870
LeetCode 75 —— 70. 爬楼梯
相关推荐
LeetCode-70-爬楼梯
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验