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

wordpress smtp qqseo网络推广是干嘛的

wordpress smtp qq,seo网络推广是干嘛的,乐清seo公司推荐,wordpress备案号无显示70. 爬楼梯 方法一、递归 记录返回值 记忆化搜索 注意到「先爬 1 个台阶,再爬 2 个台阶」和「先爬 2 个台阶,再爬 1 个台阶」,都相当于爬 3 个台阶,都会从 dfs(i) 递归到 dfs(i−3)。 一叶知秋,整个递归中有大量重…

70. 爬楼梯

方法一、递归 + 记录返回值 = 记忆化搜索

注意到「先爬 1 个台阶,再爬 2 个台阶」和「先爬 2 个台阶,再爬 1 个台阶」,都相当于爬 3 个台阶,都会从 dfs(i) 递归到 dfs(i−3)。

一叶知秋,整个递归中有大量重复递归调用(递归入参相同)。由于递归函数没有副作用,同样的入参无论计算多少次,算出来的结果都是一样的,因此可以用记忆化搜索来优化:

  • 如果一个状态(递归入参)是第一次遇到,那么可以在返回前,把状态及其结果记到一个 memo 数组中。
  • 如果一个状态不是第一次遇到(memo 中保存的结果不等于 memo 的初始值),那么可以直接返回 memo 中保存的结果。

注意:memo 数组的初始值一定不能等于要记忆化的值!例如初始值设置为 0,并且要记忆化的 dfs(i) 也等于 0,那就没法判断 0 到底表示第一次遇到这个状态,还是表示之前遇到过了,从而导致记忆化失效。一般把初始值设置为 −1。本题由于方案数均为正数,所以可以初始化成 0。

class Solution:def climbStairs(self, n: int) -> int:@cache  # 缓存装饰器,避免重复计算 dfs 的结果def dfs(i: int) -> int:if i <= 1:  # 递归边界return 1return dfs(i - 1) + dfs(i - 2)return dfs(n)

时间复杂度:O(n)。由于每个状态只会计算一次,动态规划的时间复杂度 = 状态个数 × 单个状态的计算时间。本题状态个数等于 O(n),单个状态的计算时间为 O(1),所以动态规划的时间复杂度为 O(n)。
空间复杂度:O(n)。有多少个状态,memo 数组的大小就是多少。

方法二、1:1 翻译成递推

我们可以去掉递归中的「递」,只保留「归」的部分,即自底向上计算。

具体来说,f[i] 的定义和 dfs(i) 的定义是一样的,都表示从 0 爬到 i 有多少种不同的方法。

相应的递推式(状态转移方程)也和 dfs 一样:

f[i]=f[i−1]+f[i−2]
相当于之前是用递归去计算每个状态,现在是枚举并计算每个状态。

初始值 f[0]=1, f[1]=1,翻译自递归边界 dfs(0)=1, dfs(1)=1。

答案为 f[n],翻译自递归入口 dfs(n)。

class Solution:def climbStairs(self, n: int) -> int:# 创建一个长度为 n+1 的列表 f,用于存储每一步的解(动态规划表)f = [0] * (n + 1)# 初始化基本情况:# f[0] = 1:表示到达第 0 层(地面)的方法只有一种(不动)# f[1] = 1:从第 0 层到第 1 层只有一种方式(走一步)f[0] = f[1] = 1# 动态规划递推:从第 2 层开始计算每一层的方法数for i in range(2, n + 1):# 到达第 i 层的方式数等于:# - 从第 i-1 层走 1 步上来# - 或者从第 i-2 层走 2 步上来f[i] = f[i - 1] + f[i - 2]# 返回最终结果:到达第 n 层的方法数return f[n]

📊 示例演示:当 n = 5 时,数组 f 的变化过程如下:

if[i]解释
0f[0] = 1初始值
1f[1] = 1初始值
2f[2] = 2f[1] + f[0] = 1 + 1
3f[3] = 3f[2] + f[1] = 2 + 1
4f[4] = 5f[3] + f[2] = 3 + 2
5f[5] = 8f[4] + f[3] = 5 + 3

所以,当 n=5 时,输出是 8


⏱️ 时间复杂度分析:

  • 时间复杂度:O(n),因为我们循环了 n 次。
  • 空间复杂度:O(n),使用了一个大小为 n+1 的数组来保存中间结果。

方法三、空间优化

用nen_f来作为中间变量传递值

每次循环,计算出新的状态 newF=f1+f0

那么对于下一轮循环来说:

  • 「上上一个状态」就是 f1,更新 f 0=f1
  • 「上一个状态」就是 newF,更新 f1=newF。

最后答案为 f1,因为最后一轮循环算出的 newF 赋给了 f 

class Solution:def climbStairs(self, n: int) -> int:f0 = f1 = 1for _ in range(2,n+1):nen_f = f0 + f1f0 = f1f1 = nen_freturn f1

📊 示例演示:当 n = 5 时,循环过程如下:

循环次数当前层 inew_f = f1 + f0f0 更新为f1 更新为
初始--11
第1次i=21+1=212
第2次i=32+1=323
第3次i=43+2=535
第4次i=55+3=858

最终返回 f1 = 8,说明爬 5 层楼有 8 种不同方式


⏱️ 时间与空间复杂度分析:

  • 时间复杂度: O(n),我们只遍历了一次循环。
  • 空间复杂度: O(1),只用了几个变量,没有使用额外数组。

http://www.dtcms.com/wzjs/259116.html

相关文章:

  • 做h5的网站有哪些如何在百度提交自己的网站
  • 洛阳网站建设网站建设百度搜索风云榜单
  • 北京单页营销型网站制作十大最免费软件排行榜
  • 做ppt图片用的网站有哪些问题新乡百度关键词优化外包
  • 网站做赌博词怎么推广连云港seo优化
  • 做外链的博客网站营销团队
  • wordpress 新窗口站长工具seo综合查询收费吗
  • 扬中网站建设公司全网推广
  • 昆明网站的建设免费crm客户管理系统
  • 一个网站如何做cdn加速郑州网站优化公司
  • 网站中的下拉菜单日喀则网站seo
  • 备案用的网站建设方案书怎么写营销策划方案ppt
  • 云南住房和建设厅网站首页信息流优化
  • 代备案网站网站到首页排名
  • 免费网站制作app编程培训
  • 自己建网站教程html底部友情链接代码
  • 电商网站开发团队怎么创建个人网站
  • 做一公司网站优化快速排序
  • 小型网站开发时间周期如何购买域名
  • 高端定制网站设计公司二级域名网站查询入口
  • 深圳罗湖外贸网站建设友情链接实例
  • 怎么进入网站管理页面百度手机助手下载安装最新版
  • 如何给喜欢的明星做网站网站快速排名服务
  • 做网站要多少钱新乡阿里巴巴指数查询
  • 网站开发功能确认单网络营销的10个特点
  • 网站建设及优化教程关键词有哪几种
  • 基层政府门户网站建设的问题郑州网站推广公司哪家好
  • 网站自适应手机怎么刷赞网站推广ks
  • baby做网站汽车电商平台营销策划方案
  • 宝鸡做网站哪家公司好潍坊seo招聘