[动态规划] (一) LeetCode 1137.第N个泰波那契数
[动态规划] (一) LeetCode 1137.第N个泰波那契数
文章目录
- [动态规划] (一) LeetCode 1137.第N个泰波那契数
- 题目解析
- 解题思路
- 状态表示
- 状态转移方程
- 初始化和填表顺序
- 返回值
- 代码实现
- 总结
- 空间优化
- 代码实现
- 总结
1137. 第 N 个泰波那契数
题目解析

解题思路
状态表示
(1) 题目要求
(2) 经验+题目要求
(3) 分析问题发现重复子问题
dp[i]的含义:dp[i]表示第N个泰波纳切数。
状态转移方程
由题意得:
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
初始化和填表顺序
初始化:填表时保证不越界
填表顺序:保证之前的状态已经计算过了,所以是从左向右
返回值
题目要求+状态表示
返回第n个泰波那契数:return dp[n]。
代码实现
class Solution {
public:int tribonacci(int n) {//处理边界情况if(n == 0) return 0;else if(n == 1 || n == 2) return 1;//1.创建dp表vector<int> dp(n+1);//2.初始化dp[0] = 0, dp[1] = 1, dp[2] = 1;for(int i = 3; i <= n; i++){//3.填表dp[i] = dp[i-1] + dp[i-2] + dp[i-3];}//返回值return dp[n];}
};

总结
细节1:注意处理边界情况。
细节2:开辟容器时初始化(n+1)个空间,数组下标从0开始。
细节3:遍历完整的n,i <= n。
时间复杂度:O(n)
空间复杂度:O(n)
空间优化
滚动数组:
dp[3] = dp[2] + dp[1] + dp[0]
dp[4] = dp[3] + dp[2] + dp[1],没有使用到dp[0]
dp[5] = dp[4] + dp[3] + dp[2],没有使用到dp[1], dp[0]。
造成了空间的浪费,所以我们可以定义4个变量a, b, c, d来循环写入dp[i]。
a = 0, b = 1, c = 1, d = a+b+c
a = b, b = c, c = d, d = a+b+c(如果反过来,就会让 a = b = c 和d一样了)
代码实现
class Solution {
public:int tribonacci(int n) {if(n == 0) return 0;else if(n == 1 || n == 2) return 1;int a = 0, b = 1, c = 1;int d = 0;for(int i = 3; i <= n; i++){d = a + b + c;a = b, b = c, c = d;}return d;}
};

总结
时间复杂度:O(N) 空间复杂度:O(1)
相关文章:
[动态规划] (一) LeetCode 1137.第N个泰波那契数
[动态规划] (一) LeetCode 1137.第N个泰波那契数 文章目录 [动态规划] (一) LeetCode 1137.第N个泰波那契数题目解析解题思路状态表示状态转移方程初始化和填表顺序返回值 代码实现总结空间优化代码实现 总结 1137. 第 N 个泰波那契数 题目解析 解题思路 状态表示 (1) 题目要…...
SystemVerilog语法中,在Class中引用层次化信号
在class中可以像在verilog中一样,直接在class中引用层次化信号。示例如下: 1.DUT模块,文件名为top.v。 module top (input clk ,input rst_n ,//总线信号 input wr_n ,input rd_n ,input cs0_n ,input cs7_n …...
磁盘的结构(磁道,扇区,盘面,柱面,物理地址)
目录 1.磁盘、磁道、扇区的概念1.磁盘2.磁道3.扇区 2.如何在磁盘中读/写数据3.盘面、柱面的概念4.磁盘的物理地址1.根据地址读取一个“块” 5.磁盘的分类1.活动头磁道2.固定头磁盘3.根据盘片是否可更换 1.磁盘、磁道、扇区的概念 1.磁盘 磁盘的表面由一些磁性物质组成…...
uni-app集成uni-simple-router,报错:Uncaught ReferenceError: ROUTES is not defined
参考连接:GitHub - SilurianYang/uni-read-pages: read pages.json file to generate the routes table 作用:配置 vue.config.js 通过 webpack注入全局变量 问题:缺少Webpack 配置环境 方法: 项目根目录下打开终端,…...
几个常用的nosql数据库的操作方式
dynamoDB 键 partition key:分区键 定义:分区键是用于分布数据存储的主键,每个项(Item)在表中都必须有一个唯一的分区键值。 特点: 唯一性:每个分区键值在表中必须是唯一的,这是因为…...
如何使用 nvm-windows 这个工具来管理你电脑上的Node.js版本
nvm-windows 是一个用于管理在 Windows 上安装的多个 Node.js 版本的工具。以下是安装和使用 nvm-windows 的步骤: 第1步:下载 nvm-windows 访问 nvm-windows 的 GitHub发布页面.下载最新版本的 nvm-setup.zip 文件。 第2步:安装 nvm-wind…...
公司电脑禁用U盘的方法
公司电脑禁用U盘的方法 安企神U盘管理系统下载使用 在这个复杂的数据时代,保护公司数据的安全性至关重要。其中,防止未经授权的数据泄露是其中的一个关键环节。U盘作为一种常用的数据传输工具,也成为了潜在的安全风险。因此,公司…...
Elasticsearch 7.X版本常用语法语句
文章目录 监控相关 API查看健康状况查看所有节点查看所有节点详细信息查看主节点查看所有索引查看所有分片 索引管理创建索引查看索引查看索引字段类型修改索引字段删除索引别名给索引添加别名查询某个索引下的别名给索引更换别名给索引解绑别名一个别名绑定多个索引查询index_…...
Python分享之数学与随机数 (math包,random包)
我们在Python运算中看到Python最基本的数学运算功能。此外,math包补充了更多的函数。当然,如果想要更加高级的数学功能,可以考虑选择标准库之外的numpy和scipy项目,它们不但支持数组和矩阵运算,还有丰富的数学和物理方…...
Linux 基本语句_8_C语言_文件控制
为了解决多个进程同时操作一个文件,产生一些情况,通常对文件进行上锁,已解决对共享文件的竞争 对打开文件进行各种操作: int fcentl(int fd, int cmd, .../*arg*/如果cmd与锁操作有关,那么fcentl函数的第三个参数就要…...
博通BCM575系列 RDMA 网卡驱动 bnxt_re 分析(一)
简介 整个BCM系列驱动分成以太网部分(bnxt_en.ko)和RDMA部分(bnxt_re.ko), 两个模块之间通过内核的auxiliary_bus进行管理.我们主要分析下bnxt_re驱动. 代码结构 这个驱动的核心是 qplib_fp.c, 这个文件主要包含了驱动的数据路径, 包括Post Send, Post Recv, Poll CQ流程的实…...
ExcelPatternTool 开箱即用的Excel工具包现已发布!
文章目录 ExcelPatternTool功能特点:快速开始使用说明常规类型高级类型Importable注解Exportable注解IImportOption导入选项IExportOption导出选项单元格样式StyleMapping样式映射使用数据库作为数据源 示例Sample1:不同类型字段导出Sample2:…...
Navicat for MySQL 视图创建使用方法
创建视图步骤: 点击新建;选择视图;点击视图创建工具;可以在左侧拖拽表到工作区;选择表字段进行连线...
计算机视觉的相机选型
#你一般什么时候会用到GPT?# 目前市面上的工业相机大多是基于CCD(ChargeCoupled Device)或CMOS(Complementary Metal Oxide Semiconductor)芯片的相机。一般CCD制造工艺更加复杂,也会更贵一点! 1、CCD工…...
实体店做商城小程序如何
互联网电商深入各个行业,传统线下店商家无论产品销售还是服务业,仅靠以往的经营模式,很难拓展到客户,老客流失严重,同时渠道单一,无法实现外地客户购物及线上客户赋能等。 入驻第三方平台有优势但也有不足…...
sql-50练习题0-5
sql练习题0-5题 前言数据库表结构介绍学生表课程表成绩表教师表 0-1 查询"01"课程比"02"课程成绩高的学生的信息及课程分数0-2查询"01"课程比"02"课程成绩小的学生的信息及课程分数0-3查询平均成绩大于等于60分的同学的学生编号和学生…...
Flutter框架实现登录注册功能,不连接数据库
要在Flutter框架中实现登录和注册功能,而不连接数据库,可以使用本地存储来存储用户信息。以下是一个简单的示例,演示如何使用本地存储来实现登录和注册功能。 首先,我们需要添加 shared_preferences 插件到 pubspec.yaml 文件中&…...
持续集成部署-k8s-部署利器-Helm
这里写目录标题 1. Helm 是什么?2. 快速安装 Helm2.1 前置条件2.2 Helm 版本与 K8s 版本对应关系2.3 离线安装 Helm3. Helm 常用命令1. Helm 是什么? Helm 是一个用于 Kubernetes 应用程序部署和管理的开源工具。它可以帮助简化 Kubernetes 应用程序的打包、发布、配置和升级…...
替换所有的问号
这篇也是凑数的 哈哈.... 稍后会整合到算法通关第三关白银挑战 . 描述 : 给你一个仅包含小写英文字母和 ? 字符的字符串 s,请你将所有的 ? 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。 注意 : 不能 修改非 ? 字符 . 题目 : …...
NCCL后端
"NCCL" 代表 "NVIDIA Collective Communications Library","NVIDIA 集体通信库",它是一种由 NVIDIA 开发的用于高性能计算的通信库。NCCL 专门设计用于加速 GPU 群集之间的通信,以便在并行计算和深度学习等领域…...
药片机MCGS6.2 与西门子 S7 - 200 PLC 联机程序探究
药片机MCGS6.2和西门子S7-200plc联机程序4,在自动化生产领域,药片机的精准控制至关重要。MCGS6.2 作为一款优秀的人机界面组态软件,与西门子 S7 - 200 PLC 配合,能实现高效的自动化控制。今天咱就唠唠它们联机程序的一些要点。 通…...
实战指南:用Python的pyttsx3库打造你的专属语音助手
1. 从零认识pyttsx3:你的代码会说话 第一次听到电脑用标准播音腔朗读出我写的文字时,那种感觉就像小时候收到会说话的生日贺卡。pyttsx3这个神奇的Python库,能让任何文本通过声卡变成人声。不同于需要联网的语音合成服务,它完全离…...
TikTok直播卡顿、发布失败?可能是你的动态IP池没调好(附IPIPD轮询策略设置)
TikTok直播与内容发布的动态IP优化实战指南 直播突然中断、视频上传失败——这些看似随机的网络问题,往往源于动态IP池的配置不当。许多运营者投入大量成本获取优质IP资源,却因参数设置不合理导致实际效果大打折扣。本文将深入解析TikTok平台的风控机制与…...
【从零开始学Java | 第二十五篇】TreeSet
目录 前言 一、TreeSet的特点 二、TreeSet集合默认的规则 1.默认排序/自然排序 2.比较器排序 总结 前言 在 Java 的集合框架中,Set 接口代表了一个不允许存在重复元素的集合。我们最常用的通常是 HashSet,因为它提供了极高的查找和插入效率。但是&…...
突破下载瓶颈:3个鲜为人知的ComfyUI加速方案,速度提升300%的秘密
突破下载瓶颈:3个鲜为人知的ComfyUI加速方案,速度提升300%的秘密 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and…...
PHP 8新特性盘点
PHP 8 新特性概览PHP 8 引入了多项重大改进和新功能,以下为关键特性总结:JIT 编译器即时编译:通过 JIT(Just-In-Time)编译器提升性能,尤其适用于 CPU 密集型任务。配置选项:在 php.ini 中可通过…...
从Pico到Pico W:无线加持下,树莓派微控制器如何重塑物联网原型设计
1. 从有线到无线的跨越:Pico W带来的物联网革命 记得我第一次用树莓派Pico做智能温湿度计项目时,被传感器布线折腾得够呛。为了把数据传到服务器,不得不在面包板上插满杜邦线,最后成品活像只炸毛的刺猬。直到Pico W出现ÿ…...
ollama部署本地大模型|embeddinggemma-300m跨境电商评论情感迁移学习实践
ollama部署本地大模型|embeddinggemma-300m跨境电商评论情感迁移学习实践 1. 环境准备与快速部署 想要在本地运行强大的文本嵌入模型吗?今天我来手把手教你用ollama部署embeddinggemma-300m,这是一个只有3亿参数但效果惊人的小模型…...
为什么选择Apache NetBeans?完整对比主流IDE的优势与特色
为什么选择Apache NetBeans?完整对比主流IDE的优势与特色 【免费下载链接】netbeans Apache NetBeans 项目地址: https://gitcode.com/gh_mirrors/ne/netbeans Apache NetBeans是一款由Apache软件基金会开发的开源集成开发环境(IDE)&a…...
最好用的服务器文件传输工具:SSHFerry(下载见结尾)
为了 AutoDL 传文件更快更省心,我自己做了个 SSH 工作区:SSHFerry(下载见结尾) 之前我写过一篇和 AutoDL 上传有关的文章,没想到后面慢慢有了 1 万多阅读。 但那篇文章现在回头看,我觉得还是有点不够负责。…...
