当前位置: 首页 > news >正文

爬楼梯问题(Leetcode 第70题)

爬楼梯问题(Leetcode 第70题)

问题描述

假设你正在爬楼梯。每次你可以爬 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

问题分析

这道题可以看作是一个经典的动态规划问题,或者是斐波那契数列的变种。

思路分析

当你站在第 n 阶台阶时,你可以通过以下两种方式到达:

  1. 从第 n-1 阶台阶走 1 个台阶到达。
  2. 从第 n-2 阶台阶走 2 个台阶到达。

因此,我们可以通过状态转移方程来定义这个问题:

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

这意味着,爬到第 n 阶的方法数等于爬到第 n-1 阶和第 n-2 阶的方法数之和。

初始条件:

  • dp[1] = 1:只有一种方式(一步到达第一阶)。
  • dp[2] = 2:有两种方式(1 阶 + 1 阶,或者 2 阶)。

基于以上思路,我们可以使用动态规划(DP)来解决这个问题。

代码实现

class Solution:def climbStairs(self, n: int) -> int:a, b = 1, 1  # 初始化a和b,代表爬到第1阶和第2阶的方式数for i in range(n - 1):  # 从第1阶到第n阶a, b = b, b + a  # 更新a和b,分别代表上一阶和当前阶的方案数return b  # 返回最终到达第n阶的方法数

解释

  • 我们用两个变量 ab 来表示爬到当前台阶的方案数。
  • 初始时,ab 都是 1,因为爬到第 1 阶和第 2 阶的方法数各为 1。
  • 然后通过 for 循环逐步更新 ab,其中 a 存储上一步的值(dp[i-1]),b 存储当前的值(dp[i])。
  • 每次更新时,b = b + a,这是因为到达第 i 阶的方法数是从第 i-1 阶和第 i-2 阶跳过来,所以下一阶的方案数等于前两阶方案数之和。

时间和空间复杂度

时间复杂度

  • O(n):我们只需要遍历一次循环,时间复杂度为 O(n)

空间复杂度

  • O(1):我们只使用了常量空间来存储 ab,空间复杂度为 O(1)

总结

这道题的本质是一个斐波那契数列问题,可以通过动态规划来求解。利用滚动数组优化,我们用两个变量 ab 代替了原本需要存储的整个数组,极大地节省了空间。在时间复杂度上,由于只需要遍历一次,我们的解法是高效的。

http://www.lryc.cn/news/523356.html

相关文章:

  • 6.5 正定矩阵
  • verilog笔记1
  • 游戏引擎学习第81天
  • git系列之revert回滚
  • 监控与调试:性能优化的利器 — ShardingSphere
  • LLVM - 编译器前端 - 理解BNF(巴科斯-诺尔范式)
  • 服务化架构 IM 系统之应用 MQ
  • ELF2开发板(飞凌嵌入式)基本使用的搭建
  • Appium(四)
  • 简单的sql注入 buuctf
  • Ubuntu 24.04 LTS 空闲硬盘挂载到 文件管理器的 other locations
  • <电子幽灵>开发笔记:BAT基础笔记(一)
  • PiliPalaX ( 第三方安卓哔哩哔哩)
  • 在亚马逊云科技上高效蒸馏低成本、高精度的Llama 3.1 405B模型(上篇)
  • Amazon MSK 开启 Public 访问 SASL 配置的方法
  • LeetCode_438.找到字符串中所有字母异位词
  • 一文读懂服务器的HBA卡
  • Debezium日常分享系列之:对于从Oracle数据库进行快照的性能优化
  • 深度学习 Pytorch 基本优化思想与最小二乘法
  • C# 实现系统信息监控与获取全解析
  • Transformer详解:Attention机制原理
  • 网络安全技术深度解析与实践案例
  • JavaScript中提高效率的技巧一
  • 美食推荐系统 协同过滤余弦函数推荐美食 Springboot Vue Element-UI前后端分离
  • ThinkPHP 8的一对多关联
  • Django简介与虚拟环境安装Django
  • Redis延迟队列详解
  • 一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用
  • 第二代增强-采购申请屏幕增强
  • 图论DFS:黑红树