70.爬楼梯 python

news2025/1/9 6:14:26

爬楼梯

  • 题目
    • 题目描述
    • 示例 1:
    • 示例 2:
    • 提示:
  • 题解
    • 思路分析
    • Python 实现代码
    • 空间优化
    • 代码解释
    • 提交结果

题目

题目描述

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

题解

思路分析

这个问题可以通过动态规划(Dynamic Programming, DP)来解决。我们定义 dp[i] 表示到达第 i 阶的方法总数。根据题目描述,每次可以选择爬 1 个台阶或 2 个台阶,因此:

  • 如果最后一步是爬了 1 个台阶,那么剩下的部分就是 dp[i-1]
  • 如果最后一步是爬了 2 个台阶,那么剩下的部分就是 dp[i-2]

所以,状态转移方程为:

[ dp[i] = dp[i-1] + dp[i-2] ]

这实际上是一个斐波那契数列问题,其中 dp[0] = 1(从地面开始也算一种方式),dp[1] = 1

Python 实现代码

def climbStairs(n: int) -> int:
    if n == 1:
        return 1
    
    # 初始化 dp 数组
    dp = [0] * (n + 1)
    dp[0], dp[1] = 1, 1
    
    # 填充 dp 数组
    for i in range(2, n + 1):
        dp[i] = dp[i - 1] + dp[i - 2]
    
    return dp[n]

空间优化

注意到在上面的实现中,我们只需要前两个状态值 dp[i-1]dp[i-2] 来更新当前的状态 dp[i],因此可以进一步优化空间复杂度为 O(1),只使用两个变量来存储这两个状态值。

def climbStairs_optimized(n: int) -> int:
    if n == 1:
        return 1
    
    # 初始化前两个状态值
    prev, curr = 1, 1
    
    for i in range(2, n + 1):
        temp = curr
        curr = prev + curr
        prev = temp
    
    return curr

代码解释

  1. 初始化边界条件

    • n == 1 时,直接返回 1,因为只有一种方法爬到第一阶。
  2. 动态规划数组

    • dp[0]dp[1] 分别初始化为 1,表示到达第 0 阶和第 1 阶的方法数。
  3. 状态转移

    • 对于每一个 i,通过 dp[i] = dp[i-1] + dp[i-2] 计算到达第 i 阶的方法数。
  4. 返回结果

    • 最终返回 dp[n],即到达第 n 阶的方法数。
  5. 空间优化版本

    • 使用两个变量 prevcurr 来代替整个 dp 数组,从而将空间复杂度降低到 O(1)。

这种方法的时间复杂度为 O(n),因为我们只需要遍历一次从 2 到 n 的所有整数。而空间优化后的版本更是将空间复杂度降到了常数级别,非常适合处理较大的输入值(如题目提示中的 1 <= n <= 45)。

提交结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2273614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优质内容在个人IP运营中的重要性:以开源AI智能名片商城小程序为应用实例的深度探讨

摘要&#xff1a;在数字化时代&#xff0c;个人品牌&#xff08;IP&#xff09;的塑造与传播已成为各行各业提升影响力、吸引用户关注、促进商业转化的关键策略。优质内容作为连接个人IP与目标受众的桥梁&#xff0c;其在个人IP运营中的重要性不言而喻。本文旨在深入探讨优质内…

有限元分析学习——Anasys Workbanch第一阶段笔记(8)水杯案例的对称与轴对称处理

目录 1 序言 2 对称处理 2.1 模型处理 2.2 网格划分、约束载荷及接触设置 2.3 计算结果 3 轴对称处理 3.1 对称与轴对称概念 3.2 轴对称问题的应用 3.2.1 创建分析案例 3.2.2 导入并处理模型 3.2.3 网格划分、约束载荷及接触设置 3.2.4 后处理计算结果 1 序言 本章…

网络安全-web渗透环境搭建-BWAPP(基础篇)

01--所需系统环境&#xff1a; 虚拟主机系统部署&#xff08;vmware&#xff0c;虚拟主机创建、虚拟主机网络配置&#xff08;桥接&#xff0c;便于网络中多个主机都能访问虚拟主机&#xff09;、虚拟软件功能&#xff0c;快照、克隆、镜像文件加载&#xff0c;ova文件制作&am…

Java 实现 Elasticsearch 查询当前索引全部数据

Java 实现 Elasticsearch 查询当前索引全部数据 需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后 需求背景 通常情况下&#xff0c;Elasticsearch 为了提高查询效率&#xff0c;对于不指定分页查询条数的查询语句&#xff0c;默认会返回10条数据。那么这就会有…

算能AI计算服务器SE5设备树的二次修改实操

目录 1.大纲 2.实操 2.下载对应文件包 3.解包启动文件 4.修改对应的设备树 5.重启后 教程链接&#xff1a;https://github.com/sophgo/sophon-tools/tree/main/source/pmemory_edit 1.大纲 2.实操 2.1 选择串口&#xff0c;波特率115200&#xff0c;重启设备&#xff0…

Python的Matplotlib库应用(超详细教程)

目录 一、环境搭建 1.1 配置matplotlib库 1.2 配置seaborn库 1.3 配置Skimage库 二、二维图像 2.1 曲线&#xff08;直线&#xff09;可视化 2.2 曲线&#xff08;虚线&#xff09;可视化 2.3 直方图 2.4 阶梯图 三、三维图像 3.1 3D曲面图 3.2 3D散点图 3.3 3D散…

Flutter:封装一个自用的bottom_picker选择器

效果图&#xff1a;单列选择器 使用bottom_picker: ^2.9.0实现&#xff0c;单列选择器&#xff0c;官方文档 pubspec.yaml # 底部选择 bottom_picker: ^2.9.0picker_utils.dart AppTheme&#xff1a;自定义的颜色 TextWidget.body Text() <Widget>[].toRow Row()下边代…

牛客网刷题 ——C语言初阶(6指针)——BC106 上三角矩阵判定

1. 题目描述——BC106 上三角矩阵判定 牛客网OJ题链接 描述 KiKi想知道一个n阶方矩是否为上三角矩阵&#xff0c;请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵&#xff0c;主对角线为从矩阵的左上角至右下角的连线。 示例 输入&#xff1a; 3 1 2 3 0 4 5 0 0…

力扣刷题:数组OJ篇(下)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 目录 1.轮转数组&#xff08;1&#xff09;题目描述…

《(限)战斗天赋VR》V02122024官方中文学习版

《(限)战斗天赋VR》官方中文版https://pan.xunlei.com/s/VODaeHDXSxw4BNDNl39dxJXnA1?pwdusm5# 一款具有挑战性的基于物理的roguelite剑术格斗游戏&#xff0c;你可以在一个超级无缝的程序地牢中创造自己的战斗风格&#xff0c;体验无与伦比的游戏体验。有80多种敌人变种、10…

《Spring Framework实战》3:概览

欢迎观看《Spring Framework实战》视频教程 Spring Framework 为基于现代 Java 的企业应用程序提供了全面的编程和配置模型 - 在任何类型的部署平台上。 Spring 的一个关键要素是应用程序级别的基础设施支持&#xff1a;Spring 专注于企业应用程序的 “管道”&#xff0c;以便…

基于SpringBoot+Vue动漫交流系统平台设计和实现

系统介绍&#xff1a; 免费的源码&#xff0c;我刚找到的&#xff0c;给大家推荐一下源码下载 动漫交流系统平台是一个专为动漫爱好者设计的在线社区平台&#xff0c;旨在为用户提供一个便捷的环境来分享动漫。这个系统包含了多种功能&#xff0c;如动漫分类、动漫视频、动漫…

微信小程序获取图片使用session(上篇)

概述&#xff1a; 我们开发微信小程序&#xff0c;从后台获取图片现实的时候&#xff0c;通常采用http get的方式&#xff0c;例如以下代码 <image class"user_logo" src"{{logoUrl}}"></image>变量logoUrl为ur图片l的请求地址 但是对于很多…

HTML5实现好看的中秋节网页源码

HTML5实现好看的中秋节网页源码 前言一、设计来源1.1 网站首页界面1.2 登录注册界面1.3 节日由来界面1.4 节日习俗界面1.5 节日文化界面1.6 节日美食界面1.7 节日故事界面1.8 节日民谣界面1.9 联系我们界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看…

Redis 数据库源码分析

Redis 数据库源码分析 我们都知道Redis是一个 <key,value> 的键值数据库&#xff0c;其实也就是一个 Map。如果让我来实现这样一个 Map&#xff0c;我肯定是用数组&#xff0c;当一个 key 来的时候&#xff0c;首先进行 hash 运算&#xff0c;接着对数据的 length 取余&…

【海南省】乡镇界arcgis格式shp数据乡镇名称和编码gis矢量数据

《海南省乡镇界GIS矢量数据详解》 GIS&#xff08;Geographic Information System&#xff09;是一种强大的地理信息系统&#xff0c;它结合了地图、数据库和计算机技术&#xff0c;用于管理和分析空间数据。在本篇中&#xff0c;我们将聚焦于一个特定的GIS数据集——“最新海…

JVM 核心知识点总结

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

嵌入式系统 (5.嵌入式Linux网络应用开发)

5.嵌入式 Linux 网络应用开发 5.1相关概念 客户端程序与服务端程序 在网络编程中,客户端程序与服务端程序是网络通信的两个基本角色。客户端发起请求,服务端响应请求并提供服务。 IP 地址与端口号 IP 地址用于标识网络设备的位置,而端口号标识运行在计算机上的具体进程…

语义SEO全解析:如何在搜索引擎中脱颖而出?

在过去十年中&#xff0c;搜索格局发生了巨大变化&#xff0c;语义 Web 技术成为一项关键功能。用户现在希望搜索引擎比以往任何时候都更好地掌握自然语言。是的&#xff0c;Google 在语言处理方面取得了一些非凡的成就。 当搜索引擎不那么先进时&#xff0c;很少需要一键就能…

回归预测 | MATLAB实GRU多输入单输出回归预测

回归预测 | MATLAB实GRU多输入单输出回归预测 目录 回归预测 | MATLAB实GRU多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 回归预测 | MATLAB实GRU多输入单输出回归预测。使用GRU作为RNN的一种变体来处理时间序列数据。GRU相比传统的RNN有较好的记…