1137. 第 N 个泰波那契数

简单
相关标签
premium lock icon
相关企业
提示
泰波那契序列 Tn 定义如下:

T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2

给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

示例 1:

输入:n = 4
输出:4
解释:
T_3 = 0 + 1 + 1 = 2
T_4 = 1 + 1 + 2 = 4
示例 2:

输入:n = 25
输出:1389537

提示:

0 <= n <= 37
答案保证是一个 32 位整数,即 answer <= 2^31 - 1。
在这里插入图片描述

在这里插入图片描述

分析

解题思路
泰波那契数列(Tribonacci)定义:

T₀ = 0,  
T₁ = 1,  
T₂ = 1,  
Tₙ = Tₙ₋₁ + Tₙ₋₂ + Tₙ₋₃  (n ≥ 3)

我们要计算第 n 项 Tₙ。由于 n ≤ 37,直接用动态规划即可在 O(n) 时间内完成,且可以只用 O(1) 的额外空间(滚动变量)。


方法一:迭代 + 滚动变量(空间 O(1))

维护三个变量 a=Tₙ₋₃b=Tₙ₋₂c=Tₙ₋₁,从 i=3 迭代到 n,每次计算 d = a + b + c,然后滚动更新:

// C++ 实现
class Solution {
public:int tribonacci(int n) {if (n == 0) return 0;if (n <= 2) return 1;       // T1 = T2 = 1int a = 0, b = 1, c = 1;    // 分别对应 T0, T1, T2int d = 0;for (int i = 3; i <= n; ++i) {d = a + b + c;  // 计算 T_ia = b;          // 滚动:下轮 a = T_{i-2}b = c;          //      b = T_{i-1}c = d;          //      c = T_i}return c;}
};
# Python 实现
class Solution:def tribonacci(self, n: int) -> int:if n == 0:return 0if n <= 2:return 1a, b, c = 0, 1, 1  # 对应 T0, T1, T2for _ in range(3, n + 1):a, b, c = b, c, a + b + creturn c
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

方法二:递归 + 备忘录(空间 O(n))

虽然递归更直观,但不加缓存会产生大量重复子问题。使用哈希表或数组保存已计算的 Tₖ:

// C++ 实现:递归 + 备忘录
class Solution {vector<int> memo;
public:int tribonacci(int n) {memo.assign(n+1, -1);return dfs(n);}int dfs(int i) {if (i == 0) return 0;if (i <= 2) return 1;if (memo[i] != -1) return memo[i];return memo[i] = dfs(i-1) + dfs(i-2) + dfs(i-3);}
};
# Python 实现:递归 + 备忘录
class Solution:def __init__(self):self.memo = {0: 0, 1: 1, 2: 1}def tribonacci(self, n: int) -> int:if n in self.memo:return self.memo[n]self.memo[n] = (self.tribonacci(n-1)+ self.tribonacci(n-2)+ self.tribonacci(n-3))return self.memo[n]
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)(递归栈 + 备忘录)

对于本题,方法一最为简洁高效,推荐使用滚动变量迭代。

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

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

相关文章

[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的校园家教兼职信息交流平台管理系统,推荐!

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本校园家教兼职信息交流平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的…

vue-33(实践练习:使用 Nuxt.js 和 SSR 构建一个简单的博客)

实践练习:使用 Nuxt.js 和 SSR 构建一个简单的博客 使用 Nuxt.js 和 SSR 构建一个简单的博客是巩固你对服务器端渲染理解以及 Nuxt.js 如何简化这一过程的好方法。这个练习将带你完成设置基本博客结构、获取数据并以用户友好的格式展示,同时利用 SSR 的优势来提升 SEO 和性能…

如何在 .Net 7 中使用 MQTT 客户端

介绍 MQTT&#xff08;消息队列遥测传输&#xff09;是一种轻量级消息传递协议&#xff0c;专为资源受限的环境而设计。MQTT 广泛应用于物联网 (IoT) 和机器对机器 (M2M) 通信。 本文将讨论如何在 .NET 7 中实现 MQTT 消费者。我们将使用 MQTTnet 库&#xff0c;这是 C# 中的高…

云上攻防—Docker安全容器逃逸特权模式危险挂载

前言 之前分享的是云服务安全&#xff0c;今天开始云原生安全&#xff0c;安全道路依旧很长。 什么是Docker呢&#xff0c;它是开源的容器化平台&#xff0c;用于开发、部署和运行应用程序。它通过将应用程序及其依赖项打包在轻量级的容器中&#xff0c;实现环境一致性、快速…

2025API 开发工具Apipost 与 Apifox深度对比

在当今数字化时代&#xff0c;API 开发是构建各类软件应用的关键环节。Apipost 和 Apifox 作为两款知名的 API 开发工具&#xff0c;它们在实际开发场景中表现究竟如何呢&#xff1f;接下来&#xff0c;让我们从多个功能点进行深入对比。 一、API 设计功能 接口定义与参数设置…

从零开始搭建Windows AI开发环境:QWQ-32B部署+Cursor插件优化实战

文章目录 前言1.安装Ollama2.QwQ-32B模型安装与运行3.Cursor安装与配置4. 简单使用测试5. 调用本地大模型6. 安装内网穿透7. 配置固定公网地址总结 前言 本方案提出了一种基于Windows系统的智能化开发平台搭建策略&#xff0c;通过融合Cursor智能编程平台、Ollama模型运行框架…

PostgreSQL 中,若需显示 不在 `IN` 子句列表中的数据

在 PostgreSQL 中&#xff0c;若需显示 不在 IN 子句列表中的数据&#xff0c;可以通过以下方法实现&#xff1a; 方法 1&#xff1a;使用 NOT IN&#xff08;注意 NULL 值&#xff09; 直接筛选不包含在 IN 列表中的记录&#xff1a; SELECT * FROM your_table WHERE your_c…

嘉讯科技:医疗信息化、数字化、智能化三者之间的关系和区别

随着技术的不断发展&#xff0c;医疗行业也在发生着巨大的变化。在这个过程中&#xff0c;医疗信息化、数字化、智能化成为三个重要方向。这些变化不仅带来了医疗技术的进步&#xff0c;而且大大提高了医疗服务的质量和效率。 一、医疗信息化 医疗信息化是指医疗行业应用信息技…

Windows VMWare Centos Docker部署Springboot应用

接上篇文章&#xff1a;Windows VMWare Centos环境下安装Docker并配置MySql-CSDN博客文章浏览阅读370次&#xff0c;点赞3次&#xff0c;收藏4次。Windows VMWare Centos环境下安装Docker并配置MySqlhttps://blog.csdn.net/u013224722/article/details/148928081 一、新建Sprin…

JavaEE-Spring事务和事务的传播机制

事务 什么是事务 事务是⼀组操作的集合, 是⼀个不可分割的操作. 事务会把所有的操作作为⼀个整体, ⼀起向数据库提交或者是撤销操作请求. 所以这组操作要么同时成功, 要么同时失败. 为什么需要事务? 事务的操作 Spring 中事务的实现 创建好数据库后就是配置数据库相关的配…

共享经济视域下社群经济的本质重构:基于开源AI智能名片链动2+1模式S2B2C商城小程序源码的实证研究

摘要&#xff1a;社群经济在互联网时代呈现爆发式增长&#xff0c;但传统社群运营存在情感维系成本高、商业转化路径长、技术赋能不足等痛点。本文以共享经济理论为框架&#xff0c;结合开源AI智能名片链动21模式S2B2C商城小程序源码的技术实践&#xff0c;提出“思想-资源-机会…

测试方法的分类

静态测试 核心分类依据&#xff1a;根据是否执行程序分为静态测试和动态测试 静态测试方法 执行特征&#xff1a;不运行被测程序&#xff0c;通过人工检查或工具分析进行测试 测试对象&#xff1a;主要针对文档&#xff08;包括需求文档、设计文档等&#xff09;和源代码 实…

查看CPU支持的指令集和特性

1&#xff09;gcc -c -Q -marchnative --helptarget 2&#xff09;结果 The following options are target specific: -m128bit-long-double [enabled] -m16 [disabled] -m32 [disabled…

【大模型应用开发】Unity结合大模型实现智能问答功能

零、最终效果 Unity结合大模型实现智能问答功能 一、文本自动换行效果 新建一个Text文本&#xff0c;设置文本的最大宽度 然后添加Content Size Fitter组件&#xff0c;Vertical Fit选择Preferred Size 二、背景随文本长度变化效果 新建一个Image作为文本的背景&#xff0…

Python爬虫-爬取汽车之家全部汽车品牌及车型数据

前言 本文是该专栏的第64篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者将基于汽车之家平台,通过Python获取全部的“汽车品牌以及车型”数据。 废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详…

签名组件:uniapp 签名组件开发,兼容小程序、H5、App等 电子签名

描述 H5&#xff1a;1. 模拟横屏。2. 提示信息、模拟态也通过模拟横屏显示 小程序&#xff1a;1. 自动横屏展示 APP&#xff1a;1. 自动横屏展示 rn-signature 个性签名组件 组件名 rn-signature 签名组件兼容H5、APP、小程序。横屏签名效果。 效果展示 h5端 小程序端 APP 端…

第10.4篇 使用预训练的目标检测网络

在PyTorch提供的已经训练好的图像目标检测中&#xff0c;均是R-CNN系列 的网络&#xff0c;并且针对目标检测和人体关键点检测分别提供了容易调用的方 法。针对目标检测的网络&#xff0c;输入图像均要求使用相同的预处理方式&#xff0c;即先将每张图像的像素值预处理到0~1之…

基于开源链动2+1模式AI智能名片S2B2C商城小程序源码的运营机制沉淀与规范构建研究

摘要&#xff1a;在数字化商业生态中&#xff0c;运营机制的沉淀与规范构建是企业实现可持续增长的核心命题。本文以开源链动21模式、AI智能名片、S2B2C商城小程序源码为技术基座&#xff0c;提出“机制设计-数据沉淀-规范生成-迭代优化”的四阶闭环模型。通过某健康食品品牌的…

js代码05

题目 好的&#xff0c;我们进入异步编程的“终极形态”&#xff1a;async/await。 async/await 是在 ES2017 (ES8) 中引入的&#xff0c;它并不是一个全新的功能&#xff0c;而是建立在 Promise 之上的语法糖 (Syntactic Sugar)。它的目标是让我们能够以一种看似同步、更符合…

PyTorch里.pt和.pth的区别

在PyTorch中&#xff0c;.pt和.pth文件均用于保存模型&#xff0c;但两者在设计初衷、存储内容和使用场景上存在差异。以下是详细对比&#xff1a; 1. 核心区别 特性.pt文件.pth文件存储内容完整模型&#xff08;结构参数优化器状态等&#xff09;仅模型参数&#xff08;state…