代码随想录|Day32|动态规划01|509.斐波那契数列、70.爬楼梯、746.使用最小花费爬楼梯

509.斐波那契数列

动规五步曲:

  1. 确定 dp[i] 含义:第 i 个斐波那契数值为 dp[i]
  2. 递推公式:dp[i] = dp[i - 1] + dp[i - 2]
  3. dp数组初始化:dp[0] = dp[1] = 1
  4. 遍历顺序:从前向后
  5. 打印dp数组
class Solution:def fib(self, n: int) -> int:# 如果 n==0,# 那么dp会被初始化为1个元素长,# 导致初始化前2个元素的时候报错。if n == 0:return 0dp = [0] * (n + 1)  # n 表示 第 n+1 个斐波那契数(可以自己写一个数列数一数)dp[0], dp[1] = 0, 1# 循环从 第3个 数开始,第n+1个 数结束# 也就是说,下标从 2 开始,n 结束for i in range(2, n + 1):dp[i] = dp[i - 1] + dp[i - 2]return dp[n]

70.爬楼梯

1阶:1种:1台阶

2阶:2种:1台阶2次;2台阶1次

3阶:3种:1台阶3次;1台阶1次+2台阶1次;2台阶1次+1台阶2次

对于3阶,可以从1阶或者2阶爬1次到达,也就是说3阶 = 1阶 + 2阶 = 1 + 2 = 3。

动规五步曲:

  1. 确定 dp[i] 含义:爬到第 i 阶台阶有 dp[i] 种方法
  2. 递推公式:dp[i] = dp[i - 1] + dp[i - 2]
  3. dp数组初始化:dp[1] = 1, dp[2] = 2(本题要求 n > 0)
  4. 遍历顺序:从前到后
  5. 打印dp数组

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

746.使用最小花费爬楼梯

动规五步曲:

  1. 确定 dp[i] 含义:爬到第 i 阶台阶需要的花费为 dp[i]
  2. 递推公式:dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])。到达 dp[i] 有两种方法(从dp[i - 1]跨1步,或者从dp[i - 2]跨2步),两者花费不同,我们选择最小花费。
  3. dp数组初始化:dp[0] = 0, dp[0] = 0。题意表示我们可以自由选择从下标为 0 或下标为 1 的台阶开始爬楼梯。从某台阶开始是不需要花费的,而攀爬需要花费。
  4. 遍历顺序:从前到后
  5. 打印dp数组
class Solution:def minCostClimbingStairs(self, cost: List[int]) -> int:# 需要注意的是,根据题意,顶楼为台阶数+1dp = [0] * (len(cost) + 1)dp[0], dp[1] = 0, 0for i in range(2, len(cost) + 1):dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])return dp[-1]

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【拓扑空间】示例及详解2

设A是X的一个子集, 内点、邻域:,则x是A的一个内点,A是x的一个领域 内部:A的所有的内点的集合称为A的内部,记 例1 证明: Proof: 例2 证明:是包含在A中的所有开集的并集&#xff0c…

Waifu2x:使用深度卷积神经网络的动漫风格艺术的图像超分辨率

Github网址:nagadomi/waifu2x:动漫风格艺术的图像超分辨率 (github.com) 该项目主要讲述的是如何利用预训练的深度学习模型来达到无损扩大收缩和去噪,对于一般训练图像的小伙伴应该很清晰图像经常要通过resize操作固定大小,然后c…

spring事务那些事

实际工作中还会面临千奇百怪的问题,看下面返个例子(注意MySql数据库测试): //1.hello1Service 调用 hello2Service Transactional(propagation Propagation.REQUIRED,rollbackFor Exception.class) public void doUpdate() {//…

【代码随想录】链表

203. 移除链表元素 // public class ListNode { // int val; // ListNode next; // ListNode() {} // ListNode(int val) { this.val val; } // ListNode(int val, ListNode next) { this.val val; this.next next;} // }class Solution {public ListNo…

Linux 安装系统可视化监控工具 Netdata

目录 About 监控工具 NetdataLinux 系统安装 Netdata关于 openEuler1、查看内核信息2、查看主机信息3、查看 dnf 包管理器的版本 Netdata 安装1、更新系统环境相关 rpm 包2、查看 netdata 包信息3、安装 netdata 包4、编辑 netdata.conf 配置5、启动 netdata 服务6、查看 netda…

TCP的十个重要的机制

注:TCP不是只有十个机制 TCP 可靠传输是tcp最为重要的核心(初心) 可靠传输,并不是发送方把数据能够100%的传输给接收方 而是退而求其次 让发送方发送出去数据之后,能够知道接收方是否收到数据。 一但发现对方没有…

FAS-Net

感想 图的下标弄不好,且作者未提供代码。AAAI的质量也就这样吧

基于Springboot + vue + mysql 游戏分享管理系统 (含源码)

目录 📚 前言 📑摘要 📑系统架构 📚 系统架构设计 📚 数据库设计 💬 管理员功能需求E/R图 💬 用户功能需求E/R图 💬 游戏文章E/R图 💬 用户E/R图 📚 系…

注意,这类人无法在视频号开店!

我是王路飞。 视频号也可以开店铺去卖货了吗? 是的!其实早在22年的时候,视频号就上线【小店】功能了,可以通过短视频、直播达人带货的形式,帮助商家转化商品。 当然了,视频号小店跟我一直在科普的抖音小…

U8二次开发-钉钉集成

钉钉开放平台作为企业沟通和协作的重要工具,其技术的每一次迭代都为企业带来了新的机遇和挑战。随着企业对于高效沟通和智能化管理的需求日益增长,钉钉平台的SDK更新显得尤为重要。把传统的U8与钉钉平台集成,可以有效的将业务功能和角色进行前移,打破应用系统二八原则,即8…

【C++初阶】第九站:vector的介绍及使用

前言: 🎯个人博客:Dream_Chaser 🎈博客专栏:C 📚本篇内容:vector的介绍及使用 ​ 目录 一、vector的介绍 二、vector的使用 1.vector的定义 2.vector iterator(迭代器)的使用 begin和end(…

ArcGIS操作(四)

任务: 根据江苏省夜间灯光影像完成数据处理与分析查阅统计年鉴数据以提取建成区空间分布位置完成建成区重心转移轨迹 步骤: 这里选取江苏省2000年、2004年、2008年夜光数据进行分析 加载影像 掩膜提取 投影 栅格转面 融合 栅格转面数据时分冗余&…