数据结构与算法之动态规划: LeetCode 70. 爬楼梯 (Ts, Py, Go版)

ROSTEA软件下载及情感分析详细操作教程(附网盘链接) 原ROST虚拟团队出品的ROST系列文本内容挖掘分析平台,是辅助人文社会科学研究的免费计算平台。该软件可以实现文本预处理、分字、分词、词性识别、特殊名词抽取、词频统计、英文词频统计、情感计算、分类算法、聚类算法等一系列文本挖掘,是人文社科研究和论文写作的一把利器。该软件用户量超过一万人,遍布海内外100多所大学,包括剑桥大学、日本北海道大学、北京大学、清华大学、香港城市大学、澳门大学等众多高校。关于ROSTCM6的安装介绍可以参考之前的文章ROSTCM6软件下载及语义网络分析详细操作教程ROST EA。 阅读详情

爬楼梯

  • https://leetcode.cn/problems/climbing-stairs/

描述

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

Typescript 版算法实现

1 )方案 1

function climbStairs(n: number): number {
    // n为1的情况
    if(n === 1) return 1
    let dp: number[] = [1,1]; // 初始化工具
    for(let i:number = 2; i <= n; ++ i) {
        dp[i] = dp[i-1] + dp[i-2]
    }
    return dp[n]
}
  • 思路
    • 爬到第n阶可以在n-1阶爬1个台阶,或在n-2阶爬两个台阶
    • F(n) = F(n-1) + F(n-2)
      • F(n) 代表n个台阶一共有多少种方法爬上去
      • 爬到第n阶方法数量 = 爬到n-1阶方法数量 + 爬到n-2阶方法数量
    • 一个问题可以分解为两个相互重叠的子问题,用动态规划解题
  • 步骤
    • 定义子问题:F(n) = F(n-1) + F(n-2)
    • 反复执行子问题:从2 ~ n, 执行上述公式
    • 这里的2,必须保证n-2是正的,如果只有1个台阶只有一个方法,而且1-2=-1,台阶数量不能为负数
  • 注意
    • dp 数组用来记录,第n阶需要多少种方法,下标为0的位置(0阶,当然n不能为0)设置成1
    • 下标为1的位置,1阶是1,为什么把下标为0的位置设置1,因为它能帮助方便求得2阶,真实情况下n不会等于0,此处需要的是工具值

2 )方案 2

function climbStairs(n: number): number {
    // n为1的情况
    if(n === 1) return 1
    // 用两个变量来代表前两步
    let dp0 = 1;
    let dp1 = 1;

    for(let i: number = 2; i <= n; ++ i) {
        // 不断地把dp0, dp1分别代表数组的倒数两个数字
        let tmp = dp0;
        dp0 = dp1;
        dp1 += tmp; // 用常量取代数组,空间复杂度下降
    }
    return dp1;
}
  • 思路同上,优化了空间复杂度,官方给的滚动数组初始化的一些变量不太好理解,后面的矩阵快速幂方法比较复杂了,通项公式法就是用的数学推导

Python3 版算法实现

1 )方案 1

class Solution:
    def climbStairs(self, n: int) -> int:
        if n == 1: return 1

        dp = [1, 1]
        for i in range(2, n + 1):
            dp.append(dp[-1] + dp[-2])

        return dp[n]

2 )方案 2

class Solution:
    def climbStairs(self, n: int) -> int:
    	if n == 1: return 1
    	dp0 = 1
    	dp1 = 1

    	for i in range(2, n+1):
    		tmp = dp0
    		dp0 = dp1
    		dp1 += tmp
    	return dp1

Golang 版算法实现

1 )方案 2

func climbStairs(n int) int {
    if n == 1 {
        return 1
    }

    dp := []int{1, 1}  // 初始化工具
    for i := 2; i <= n; i++ {
        dp = append(dp, dp[i-1]+dp[i-2])
    }
    return dp[n]
}

2 )方案 2

func climbStairs(n int) int {
    if n == 1 {
        return 1
    }

    dp0 := 1
    dp1 := 1
    for i := 2; i <= n; i++ {
        tmp := dp0
        dp0 = dp1
        dp1 += tmp
    }
    return dp1
}
史上最全!研究生科研必备科研工具(含AI科研工具),附使用说明和示例 这些工具在科研中的应用非常广泛,可以帮助研究生更高效地完成研究任务。为了更好地利用这些工具,建议深入学习它们的官方文档和教程,或者参加相关的工作坊和培训。 阅读详情

相关推荐

手把手教你用GD32F407VET6的EXMC驱动外部SRAM,搞定大内存需求

本文详细介绍了如何使用GD32F407VET6的EXMC外设驱动外部SRAM,解决嵌入式开发中的大内存需求问题。通过硬件连接方案、EXMC时序配置与初始化步骤,以及软件集成与内存管理技巧,帮助开发者快速实现内存扩展。特别适合需要处理图形显示缓冲、音频处理等大内存场景的GD32F407开发者。

weixin_30752699的博客 347

数据结构与算法之爬楼梯&&动态规划

动态规划基础题!

weixin_73233099的博客 695

手把手教你用FFmpeg实操:H.264转码、AVS2编码与H.265/HEVC参数调优避坑指南

本文详细解析了使用FFmpeg进行H.264转码、AVS2编码与H.265/HEVC参数调优的实战技巧。通过具体命令示例和参数详解,帮助开发者避开常见编码陷阱,提升视频处理效率和质量,特别适合音视频开发者和内容创作者参考。

weixin_30889885的博客 485

数据结构与算法:爬楼梯

数据结构与算法:爬楼梯

学习中 311

UE5在Ubuntu22.04.4下的高效开发环境配置指南

本文详细介绍了在Ubuntu 22.04.4系统上配置UE5高效开发环境的完整指南,包括系统准备、显卡驱动安装、UE5引擎编译与配置、开发工具链设置以及性能优化技巧。通过逐步指导,帮助开发者快速搭建稳定的UE5开发环境,解决常见问题,提升开发效率。

weixin_29251131的博客 383

基于Xilinx的I2S Receiver IP核和I2S Transmitter IP核音频验证

基于Xilinx的I2S Receiver IP核和I2S Transmitter IP核音频验证 文章目录前言一、工程构架二、Xilinx IP的配置1.I2S Transmitter IP配置:2.I2S Receiver IP配置:3.WM8960的配置:总结 前言 本实验基于Xilinx ZU4EV平台,也适用于ZYNQ平台。音频验证完成,记录调过程。 ①Xilinx 音频IP只支持主模式,左对齐或右对齐方式,16bit或24bit字长。 ②WM8960器件作为从模式;24bit字长;数据传输格

weixin_45637597的博客 6815

【数据结构与算法】用C语言写爬楼梯(斐波那契数列的应用,迭代与递归)爬楼梯问题超详细,看完这一篇就够了。

用C语言写爬楼梯(斐波那契数列的应用,迭代与递归)爬楼梯问题超详细,看完这一篇就够了。动态规划问题与递归,迭代。时间复杂度最优化。

摸鱼小小虫的博客 5316

【Bug已解决】codex: conversation context window exceeded / Token limit reached — CodeX CLI 上下文窗口超限解决方案

CodeX CLI 上下文窗口超限(context_length_exceeded)的解决方案,含开新会话、更大窗口模型、精简提示与限制工具输出。

博客 4184

【Python动态规划】--爬楼梯

【】@TOC 动态规划–爬楼梯 爬楼梯 题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 示例 2: 输入: 3 输出: 3 【分析】 题目中说只能爬一个台阶或两个台阶 那么:爬到第N阶方法数=再 爬一个台阶的方法+再 爬两个台阶的方法 第1阶:1+0 1 第2阶:1+1 2 第3阶:2+1 3(ps:再爬一个台阶;即从第2开始爬,爬到2的方法有两种,那么这两

weixin_47665864的博客 2937

高通开发系列 - Camera之摄像头调试记录

记录一些调试内容

fulinux的博客 1220

乌鸦搜索算法(CSA)详解:从鸟类智能到优化引擎

乌鸦搜索算法(Crow Search Algorithm,CSA)是2016年由Askarzadeh等人提出的一种新型元启发式优化算法,该算法灵感来源于自然界中乌鸦群体的智能觅食行为。这一创新性算法已成为群体智能优化算法家族中的重要成员,与粒子群优化、遗传算法等传统算法相比,CSA具有原理新颖、参数设置简单、全局搜索能力强等特点。

qq_42212808的博客 1278

【LeetCode】动态规划—爬楼梯(附完整Python/C++代码)

爬楼梯”问题是一个经典的动态规划问题,通常描述如下: 假设有一个楼梯,总共有 n 级台阶。每次你可以选择爬 1 级或 2 级台阶。你需要计算出有多少种不同的方法可以爬到楼梯的顶部。chrome-extension://difoiogjjojoaoomphldepapgpbgkhkb/assets/logo-OYJ34ERC.png

Albert_Lsk的博客 3020

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 477

(爆)重写目前做过的81道LeetCode题目

从6月份我的Leetcode计划两个月以来,明显的感觉到了Python熟练度有所提升,这两个月的时间,断断续续做了大概100道题,在博客上目前记录的有82道,有些数据结构和算法的题目,包括一些技巧其实还不是很熟练。对于应届生来说,算法基础还是最重要的一部分。 同时我不太满足于仅有的Python水平的提升,并不是贪多,而是觉得语言是相通的,Python仍是我接触很多语言以来最喜欢的语言,我也想...

eswang的优快云博客 597

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

leetcode的python实现 刷题笔记70:爬楼梯(动态规划)

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

weixin_41931602的博客 2056

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Python动态规划之爬楼梯

假设每次只能爬1级或2级台阶,如果要爬到n级台阶,那有多少种爬法? 解题思路: 假设需要爬到第5级台阶,那这个问题可以分解为 4+1 或者 3+2 (即从第4级台阶,走一步上升到第5级;或者从第3级台阶,走两步上升到第5级)。因此,第五级台阶的解法数量就转化为了第四级的解法数量加上第三级的解法数量。这样可以看出,这个问题等同于斐波那契数列。 dp[i]=dp[i-1]+dp[i-2] 解题代码如下: n=int(input()) dp=[1 for i in range(n+1)] #记录每一层阶梯的可

qq_44812523的博客 1280

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

python动态规划爬楼梯算法

python动态规划爬楼梯的不同方法数问题描述题干解读题解代码 问题描述 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1 阶 + 1 阶 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1 阶 + 1 阶 + 1 阶 1 阶 + 2 阶 2 阶 + 1 阶 https://leetcode

liu_xy_7的博客 2405

基于python的动态规划经典问题(爬楼梯,取珠宝,最大子序列和,找零钱)

1,爬楼梯问题 一个人爬楼梯,每次只能爬1个或两个台阶,假设有n个台阶,那么这个人有多少种不同的爬楼梯方法 动态规划的状态转移:第 i 个状态的方案数和第 i-1, i-2时候的状态有关,即:dp[i]=dp[i-1]+dp[i-2],dp表示状态矩阵。 def climb_stairs(n): dp=[0]*n dp[0]=1 dp[1]=2 for i ...

Briwisdom的博客 3220

python动态规划爬楼梯_动态规划入门(以爬楼梯为例)

概念动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。动态规划算法通常基于一个递推公式及一个或多个初始状态。 当前子问题的解将由上一次子问题的解推出。基本思想要解决一个给定的问题,我们需要解决其不同部分(即解决子问题),再合并子问题的解以得出原问题的解。通常许多子问题非常相似,为此动态规划法试图只解决每个子问题...

weixin_39901412的博客 739

python动态规划_爬楼梯

# coding = UTF-8 import time def fun(n): if n == 0 or n == 1: return n+1 else: return fun(n -1) + fun(n - 2) # [1, 2, 3, 5, 8, 13, 21] # 上台阶的方法数 global dp,f1,f2 f1 = 1 f2 = 2 dp

Reader_Dreamer的博客 1558

Python 解决动态规划问题之 爬楼梯

问题描述 一个人爬楼梯,每次只能爬1个或两个台阶,假设有n个台阶,那么这个人有多少种不同的爬楼梯方法 程序 def climb_stairs(n): way = [0, 1, 2] for i in range(3, n + 1): way.append(way[i - 1] + way[i - 2]) return way[n]

哎!小本本上八卦羞答答,人生太复杂... 4602

使用最小花费爬楼梯(python)——动态规划

题目描述: 数组的每个索引做为一个阶梯,第i个阶梯对应着一个非负数的体力花费值cost[i](索引从0开始)。 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。 您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。 示例1: 输入:cost = [10,15,20] 输出:15 解释:最低花费是...

weixin_40510799的博客 565

数据结构与算法笔记:字典序最大问题分析

字典序最大问题 问题描述 给定一个1到n的排列(无序状态的),依次插入到栈中,在每时每刻都可以多次从栈中弹出栈顶 问:应如何使得弹出栈顶的序列的字典序最大,并输出这个序列 问题分析 什么是字典序 比如两个序列:5,4,3,2,1和1,2,3,4,5 这两个中第一个的字典序最大 每个位置上的数字比其他序列上同一位置的数字要大 比如:第一位置中5比1大,第二位置中4比2大这样 即:字典序最大 = 从左向右看这个序列,每个数字都尽量大 题目给定一个1到n的排列,每个数字只出现一次 要使出栈的字典序最大

Wang的专栏 4393

数据结构与算法笔记:农夫过河问题python3实现

问题描述 农夫(Human)过河。一个农夫带着一只狼(Wolf),一只羊(Sheep)和一些菜(Vegetable)过河。河边只有一条船,由于船太小,只能装下农夫和他的一样东西。在无人看管的情况下,狼要吃羊,羊要吃菜,请问农夫如何才能使三样东西平安过河? 要求: 输出一行,为最终的过河方式,方案格式为 过河人员、回来人员、过河人员、回来人员、…、过河人员。 过去和回来的人员之间,用空格隔开。 以四...

Wang的专栏 3374

数据结构与算法笔记:计算思维之经典农夫过河问题C++实现

农夫、羊、狼、菜的过河问题 问题描述 角色:农夫,羊,狼,菜 条件1:船很小,只能装下农夫和其他一个角色 条件2:无人看管,羊吃菜,狼吃羊 问:如何让其他三种角色被农夫平安带着过河? 相关分析 我们可以先用人脑尝试一下相关渡河策略 1 ) 先渡狼,人回来再渡菜,人回来再渡羊 2 ) 先渡菜,人回来再渡狼,人回来再渡羊 以上两种很好想到,而且我们可以知道羊这种角色是不能先渡河过去的,羊需要最后再渡 如果先渡了羊了,之后再渡任何其他角色,都要将羊带回来 可以参考小游戏:http://gameschool

Wang的专栏 3312

数据结构与算法笔记:图搜索之DFS详解

图搜索 Graph Search 图搜索的分类 BFS广度优先(宽搜) DFS深度优先(深搜) !!!本文详解!!! 深度优先搜索DFS 深度优先遍历DFS, 这个策略其实是非常stupid or simple的,比BSF要简单的多 同样,我们可以通过一个故事来开始 在古希腊神话中, Ariadne是Crete的国王Minos的公主,她给忒修斯(Theseus)一个线团 使得忒修斯成功进入迷宫杀死牛头怪兽,但事后忒修斯抛弃了她 这是一个有道德意义的故事又或者存在不同的版本, 但不是我们的研究的对象

Wang的专栏 3119
上一篇: 数据结构与算法之动态规划: LeetCode 509. 斐波那契数 (Ts, Py, Go版)
下一篇: 数据结构与算法之动态规划: LeetCode 198. 打家劫舍 (Ts, Py, Go版)
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值