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

代码随想录算法训练营第32天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

目录

  • 509. 斐波那契数
    • 1、题目描述
    • 2、思路
    • 3、code
    • 4、复杂度分析
  • 70. 爬楼梯
    • 1、题目描述
    • 2、思路
    • 3、code
  • 746. 使用最小花费爬楼梯
    • 1、题目描述
    • 2、思路
    • 3、code
    • 4、复杂度分析

509. 斐波那契数

题目链接:link

1、题目描述

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n ,请计算 F(n) 。

2、思路

1️⃣ 动态规划(数组)
2️⃣动态规划(两个数值

3、code

1️⃣动态规划(数组)

class Solution:def fib(self, n: int) -> int:if n == 0:return 0if n == 1:return 1dp = [0]*(n+1)dp[0] = 0dp[1] = 1for i in range(2,n+1):dp[i] = dp[i-1] + dp[i-2]return dp[n]

2️⃣动态规划(两个数值)

class Solution:def fib(self, n: int) -> int:if n == 0:return 0if n == 1:return 1a = 0b = 1for i in range(2,n+1):c = a + ba = bb = creturn c

💥两个数值数值的更新需要思考
在这里插入图片描述

4、复杂度分析

1️⃣ 时间复杂度: O ( N ) O(N) O(N)
2️⃣ 空间复杂度: O ( N ) O(N) O(N)(数组) O ( 1 ) O(1) O(1)(两个值)

70. 爬楼梯

题目链接:link

1、题目描述

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。

  1. 1 阶 + 1 阶
  2. 2 阶

2、思路

1️⃣ 爬1阶台阶需要一步
2️⃣ 爬2阶台阶可以一步再一步,也可以直接2步
3️⃣ 爬3阶台阶:爬到1阶台阶之后2步上来;爬到2阶台阶之后1步上来(🔥我的思维误区?为什么不能爬到1阶台阶之后也一步再一步上来,因为这样的话就和2阶台阶的重了)

3、code

和斐波那契数列一样

746. 使用最小花费爬楼梯

题目链接:link

1、题目描述

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
示例 1:
输入:cost = [10,15,20]
输出:15
解释:你将从下标为 1 的台阶开始。

  • 支付 15 ,向上爬两个台阶,到达楼梯顶部。
    总花费为 15 。

🔥 其实这个示例1是这样的:
在这里插入图片描述

2、思路

3、code

class Solution:def minCostClimbingStairs(self, cost: List[int]) -> int:# 动态规划# step1:dp[i]含义:到达第i阶台阶需要的最小花费n = len(cost)if n == 0 or n == 1:return 0dp = [0] * (n+1)# step2:确定推导公式# dp[i] = min(dp[i-1] + cost[i-1],dp[i-2] + cost[i-2])# step3:确定初始条件(到达第0,1阶台阶是不需要花费的,因为最开始就是从0,1开始往上爬的)dp[0] = 0dp[1] = 0# step4;确定循环顺序:->for i in range(2,n+1):dp[i] = min(dp[i-1] + cost[i-1] , dp[i-2] + cost[i-2])return dp[n]

4、复杂度分析

1️⃣ 时间复杂度: O ( N ) O(N) O(N)
2️⃣ 空间复杂度: O ( N ) O(N) O(N)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 8.28路虎女事件
  • 掌握 JavaScript 解构赋值的指南
  • 蜜罐网络MHN安装过程中的坑
  • Pytorch实现多层LSTM模型,并增加emdedding、Dropout、权重共享等优化
  • Windows 下载安装RabbitMQ
  • 干货分享:推荐四大在线翻译神器!
  • 26. 在集合中删除元素时,为什么使用Iterator.remove()而不是Collection.remove()?
  • GeoScene Pro教程(004):GeoScene Pro制作与使用矢量切片包
  • STL之string
  • 技术指南:5分钟零成本实现本地AI知识库搭建
  • vue3+vant4父组件点击提交并校验子组件form表单
  • 【区块链 + 司法存证】优证云:基于 FISCO BCOS 的存证平台 | FISCO BCOS应用案例
  • 【Python自动化办公】复制Excel数据:将各行分别重复指定次数
  • c++多线程下崩溃一例分析 ACTIONABLE_HEAP_CORRUPTION heap failure block not busy DOUBLE
  • 如何优化Oracle数据库的性能?
  • 深入了解以太坊
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • HTTP请求重发
  • javascript从右向左截取指定位数字符的3种方法
  • opencv python Meanshift 和 Camshift
  • Redis学习笔记 - pipline(流水线、管道)
  • sessionStorage和localStorage
  • 程序员该如何有效的找工作?
  • 创建一个Struts2项目maven 方式
  • 你不可错过的前端面试题(一)
  • 前端存储 - localStorage
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 数据科学 第 3 章 11 字符串处理
  • 通过npm或yarn自动生成vue组件
  • 项目实战-Api的解决方案
  • 硬币翻转问题,区间操作
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • # 数仓建模:如何构建主题宽表模型?
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • ()、[]、{}、(())、[[]]命令替换
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (JS基础)String 类型
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (分布式缓存)Redis哨兵
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (十八)SpringBoot之发送QQ邮件
  • (算法)硬币问题
  • (原創) 物件導向與老子思想 (OO)
  • .apk 成为历史!
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .Net 代码性能 - (1)
  • .Net 应用中使用dot trace进行性能诊断
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .Net7 环境安装配置
  • .NET学习教程二——.net基础定义+VS常用设置
  • .sdf和.msp文件读取
  • @Repository 注解