【算法】動態規劃 斐波那契類型:1137. 第 N 個泰波那契數

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/web/87093.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87093.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87093.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖像編輯新變革 !ComfyUI-Kontext-fp8本地部署教程,120B參數對標閉源巨頭

一、介紹 ComfyUI 是一個強大的、模塊化的 Stable Diffusion 界面與后端項目。該用戶界面將允許用戶使用基于圖形/節點/流程圖的界面設計和執行高級穩定的擴散管道。 關于 FLUX.1 Kontext Dev FLUX.1 Kontext 是 Black Forest Labs 最新推出的突破性多模態圖像編輯模型&#…

軟件安裝——下載安裝ollama

一、下載&#xff08;模型管理工具&#xff09;&#xff1a; 下載地址&#xff1a;Ollama 二、自定義安裝&#xff1a; 1.令行安裝方式如下&#xff1a; 在OllamaSetup.exe所在目錄打開cmd命令行&#xff0c;然后命令如下&#xff1a; OllamaSetup.exe /DIRE:\AllEdit\Ai…

springboot集成mqtt收發消息

在 Spring Boot 中使用 MQTT 可以通過集成 Eclipse Paho 或 HiveMQ 等客戶端庫實現。以下是完整的整合步驟&#xff0c;包括配置、發布和訂閱消息的示例。 1. 添加 MQTT 依賴 在 pom.xml 中添加 Paho MQTT 客戶端依賴&#xff1a; <dependency><groupId>org.spri…

Java 編程之備忘錄模式

前言 有時候&#xff0c;我們真希望人生能有“CtrlZ”。在日常生活中&#xff0c;我們經常使用“撤銷”功能&#xff0c;例如在寫 Word、畫圖、寫代碼時一不小心操作失誤&#xff0c;就希望能回到之前的狀態。這種**“狀態快照 恢復”**機制&#xff0c;在設計模式中就叫做&a…

yolov13+bytetrack的目標跟蹤實現

目錄 1. 介紹 2. 相關工作 (Related Works) 3. 方法 (Method) 4. 統計和結果 5. 技術實現 ByteTrack: Multi-Object Tracking by Associating Every Detection Box 1. Motivation 2. BYTE 3. ByteTrack 具體代碼 UI界面設計 歷史記錄 完整代碼實現UI界面 1. 介紹 …

GO類型轉換與斷言面試題及參考答案

Go 中類型轉換與類型斷言的區別是什么? 在Go語言里,類型轉換和類型斷言是兩個不同的概念,它們在應用場景、語法格式以及底層實現上都存在明顯差異。 類型轉換主要用于將一種數據類型轉變為另一種數據類型,一般適用于基本數據類型之間的轉換,像整數與浮點數、字符串與字節…

【力扣 中等 C】79. 單詞搜索

目錄 題目 解法一&#xff1a;回溯 題目 解法一&#xff1a;回溯 void swap(char* a, char* b) {char tmp *a;*a *b;*b tmp; }void reverse(char* str) {int start 0, end strlen(str) - 1;while (start < end) {swap(&str[start], &str[end--]);} }bool se…

【數據標注師】分類標注

目錄 一、 **分類標注的認知底層邏輯**1. **三大核心挑戰2. **四維評估標準** 二、 **五階成長體系**? **階段1&#xff1a;分類體系深度內化&#xff08;2-4周&#xff09;**? **階段2&#xff1a;標注決策流程固化**? **階段3&#xff1a;場景化標注策略**? **階段4&…

大數據時代UI前端的智能化轉型策略:以用戶為中心的設計思維

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 一、引言&#xff1a;大數據驅動的 UI 前端變革浪潮 在數字化體驗競爭白熱化的今天&#xff…

【python實用小腳本-122】Detect Gender Webcam:基于Python和Keras的實時性別檢測工具

在計算機視覺和人工智能領域&#xff0c;實時性別檢測是一個具有廣泛應用前景的技術。從安防監控到智能廣告&#xff0c;性別檢測可以幫助系統更好地理解和響應用戶需求。為了實現這一功能&#xff0c;我們開發了一個基于Python和Keras的實時性別檢測工具——detect_gender_web…

Redis4

Redis除了緩存&#xff0c;還有哪些應用? Redis實現消息隊列 **使用Pub/Sub模式&#xff1a;**Redis的Pub/Sub是一種基于發布/訂閱的消息模式&#xff0c;任何客戶端都可以訂閱一個或多個頻道&#xff0c;發布者可以向特定頻道發送消息&#xff0c;所有訂閱該頻道的客戶端都會…

LEFE-Net:一種軸承故障診斷的輕量化高效特征提取網絡

一、研究背景與挑戰 軸承作為旋轉機械的核心部件&#xff0c;其健康狀態直接影響設備運行的安全性和可靠性。傳統的故障診斷方法&#xff08;如振動分析、油液檢測&#xff09;依賴人工經驗&#xff0c;效率低且易受主觀因素影響。近年來&#xff0c;基于深度學習的數據驅動方…

springboot+Apache POI 寫共導入導出

SpringBoot Apache POI 實現數據導入導出 功能特點&#xff1a; 智能列匹配&#xff1a; 支持精確列名匹配 支持忽略大小寫的列名匹配 自動匹配字段名&#xff08;當未指定ExcelProperty時&#xff09; 強大的類型轉換&#xff1a; 支持基本數據類型&#xff08;Integer/Lon…

Games101 Lecture3,Lecture4

旋轉矩陣邏輯推導 齊次坐標&#xff0c;解決平移的特殊情況 引入一個維度&#xff08;無物理意義&#xff1f;&#xff09;&#xff0c;輔助表達平移&#xff0c;為零時&#xff0c;表示向量&#xff0c;不為零時&#xff0c;表示點&#xff08;/w&#xff09; 三維旋轉矩陣 相…

折線圖多數據處理

前言&#xff1a; skline1有年份和新申請單位數&#xff0c;skline2有年份和有效期內單位數&#xff0c;我想要把1和2的年份放在一起從小到大放&#xff0c;沒有重復的&#xff0c;新申請單位數和有效期內單位數和年份的排列順序一致 實現&#xff1a; // 獲取原始數據 List…

documents4j導出pdf

一、前言 上一篇我們介紹了導出word&#xff0c;既然有了導出word&#xff0c;那么到處pdf也將會出現&#xff0c;導出word和pdf基本上是配套的需求&#xff0c;跑不了&#xff0c;那么本次我就簡單介紹一下導出pdf。 二、代碼實現 2.1、依賴引入 導出pdf是基于documents4j實現…

從零到一體驗 Qwen-TTS:用四川話合成語音的全流程技術實錄

今天很高興看到Qwen-TTS開源。試一試四川方言&#xff08;大概是成都版&#xff09;效果如何。本人無法判斷、有興趣的伙伴可以幫忙聽一聽。 四川方言TTS "胖娃胖嘟嘟&#xff0c;騎馬上成都&#xff0c;成都又好耍。胖娃騎白馬&#xff0c;白馬跳得高。胖娃耍關刀&…

php數據導出pdf文件

一.導出pdf文件&#xff0c;首先要安裝相關的類庫文件&#xff0c;我用的是dompdf類庫。 1.安裝類庫文件&#xff1a; composer require dompdf/dompdf 2.引入類庫文件到你的控制器中&#xff0c;創建方法&#xff1a; public function generatePdf(){//你需要打印的查詢內容…

Beam2.61.0版本消費kafka重復問題排查

1.問題出現過程 在測試環境測試flink的job的任務消費kafka的情況&#xff0c;通過往job任務發送一條消息&#xff0c;然后flink web ui上消費出現了兩條。然后通過重啟JobManager和TaskManager后&#xff0c;任務從checkpoint恢復后就會出現重復消費。當任務不從checkpoint恢復…

關于 java:9. Java 網絡編程

一、Socket 編程 Socket&#xff08;套接字&#xff09;是網絡通信的端點&#xff0c;是對 TCP/IP 協議的編程抽象&#xff0c;用于實現兩臺主機間的數據交換。 通俗來說&#xff1a; 可以把 Socket 理解為“電話插口”&#xff0c;插上后客戶端和服務端才能“通話”。 Sock…