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

leetcode_动态规划/递归 70. 爬楼梯

70. 爬楼梯

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

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

  • 思路:

    • 考虑: 假设现在已经爬到了某一阶台阶,那是如何到达这里的呢?可能是从前一阶台阶爬上来的,也可能是从前两阶台阶爬上来的。也就是说,从第 i 阶楼梯,可以从第 i - 1 或者 i - 2 阶楼梯爬上来。因此,有一个递推公式:d[i] = d[i-1] + d[i-2]

1. 动态规划

# 1. 动态规划
class Solution(object):def climbStairs(self, n):""":type n: int:rtype: int"""if n < 1:return 0if n == 1:return 1elif n == 2:return 2d = [0] * (n + 1)  # 初始化列表长度为 n + 1, 所有元素的值为 0, 用来存储每个台阶的爬法数d[1] = 1  # 第 1 阶只有 1 种方式d[2] = 2  # 第 2 阶有 2 种方式# 从第 3 阶开始,根据递推公式计算每个台阶的爬法数for i in range(3, n + 1):d[i] = d[i - 1] + d[i - 2]# 返回到达第 n 阶的方法数return d[n]
  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

空间优化版本

class Solution(object):def climbStairs(self, n):""":type n: int:rtype: int"""if n < 1:return 0if n == 1:return 1elif n == 2:return 2# 使用两个变量来存储前两阶的爬法数prev1, prev2 = 2, 1  # prev1 是 d[i-1], prev2 是 d[i-2]for i in range(3, n + 1):current = prev1 + prev2prev2 = prev1prev1 = current# 返回最终的结果return prev1
  • 时间复杂度: O(n)
  • 空间复杂度: O(1)

2. 递归法

# 2. 递归(ps: 递归法在leetcode中运行会超时)
class Solution(object):def climbStairs(self, n):""":type n: int:rtype: int"""if n <= 1:return 1return self.climbStairs(n-1) + self.climbStairs(n-2)
  • 时间复杂度: O(2^n),递归调用的过程形成了一个类似于树的结构,每一层都会有两个递归分支,导致时间复杂度呈指数级增长。总的递归调用数大约为 2^n,因此时间复杂度是 O(2^n)。
  • 空间复杂度: O(n),递归调用会在系统栈中占用空间,每一次递归都会添加一个新的栈帧,直到到达基准情况(n <= 1)。最深的递归调用栈的深度为 n(因为递归每次减少 1 或 2),所以空间复杂度是 O(n)。
http://www.lryc.cn/news/544040.html

相关文章:

  • 基于Rook的Ceph云原生存储部署与实践指南(上)
  • C++ Qt常见面试题(4):Qt事件过滤器
  • regionserver实例僵住问题分析
  • 服务器离线部署DeepSeek
  • QT mac系统下qml实现的菜单栏,标准快捷键Delete无作用或失灵的处理
  • redis序列化设置
  • 浅谈C++/C命名冲突
  • 【语音编解码】常用的基于神经网络的语音编解码方案对比
  • PVE 配置显卡直通
  • Kronecker分解(K-FAC):让自然梯度在深度学习中飞起来
  • ArcGIS Pro技巧实战:高效矢量化天地图地表覆盖图
  • React + TypeScript 数据模型驱动数据字典生成示例
  • 道可云人工智能每日资讯|深圳将设立人工智能和机器人产业基金
  • [2024年下半年架构师考试真题之论文]
  • 神经网络 - 激活函数(Sigmoid 型函数)
  • 阿里云 | 快速在网站上增加一个AI助手
  • 【操作系统】处理机调度
  • mysql服务层介绍,NOSQL+SQL接口(nosql介绍),语法分析器,预处理器,优化器(优化的必要性,基于成本的优化器),缓存(弊端)
  • 将DeepSeek接入vscode的N种方法
  • 【算法与数据结构】Dijkstra算法求单源最短路径问题
  • .CSV file input into contact of outlook with gibberish. .csv文件导入outlook, 出现乱码
  • StableDiffusion打包 项目迁移 项目分发 0
  • 关于Postman自动获取token
  • LSTM长短期记忆网络-原理分析
  • sql server笔记
  • AI Video Composer:基于Qwen2.5-Coder的简易开源视频创作利器
  • AI数字人开发,引领科技新潮流
  • VoIP之音频3A技术
  • [原创]openwebui解决searxng通过接口请求不成功问题
  • Jmeter聚合报告导出log文档,Jmeter聚合报告导出到CSV