【算法】509. 斐波那契數

在這里插入圖片描述

509. 斐波那契數

簡單
相關標簽
premium lock icon
相關企業
斐波那契數 (通常用 F(n) 表示)形成的序列稱為 斐波那契數列 。該數列由 0 和 1 開始,后面的每一項數字都是前面兩項數字的和。也就是:

F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
給定 n ,請計算 F(n) 。

示例 1:

輸入:n = 2
輸出:1
解釋:F(2) = F(1) + F(0) = 1 + 0 = 1
示例 2:

輸入:n = 3
輸出:2
解釋:F(3) = F(2) + F(1) = 1 + 1 = 2
示例 3:

輸入:n = 4
輸出:3
解釋:F(4) = F(3) + F(2) = 2 + 1 = 3

提示:

0 <= n <= 30

分析

斐波那契數 F(n) 定義:

F(0) = 0,  
F(1) = 1,  
F(n) = F(n-1) + F(n-2),  (n > 1)

我們只需線性遍歷到 n,即可用 O(n) 時間、O(1) 空間得到結果。


方法一:迭代 + 滾動變量

// C++ 實現
class Solution {
public:int fib(int n) {if (n < 2) return n;int a = 0;   // F(0)int b = 1;   // F(1)int c;for (int i = 2; i <= n; ++i) {c = a + b;  // F(i) = F(i-1) + F(i-2)a = b;      // 滾動:下輪當作 F(i-1)b = c;      // 下輪當作 F(i)}return b;}
};
# Python 實現
class Solution:def fib(self, n: int) -> int:if n < 2:return na, b = 0, 1  # 分別對應 F(0), F(1)for _ in range(2, n + 1):a, b = b, a + breturn b
  • 時間復雜度:O(n)
  • 空間復雜度:O(1)

方法二:遞歸 + 備忘錄(不推薦 n 較大時使用)

// C++ 遞歸 + 備忘錄
class Solution {vector<int> memo;
public:Solution(int n): memo(n+1, -1) {}int fib(int n) {if (n < 2) return n;if (memo[n] != -1) return memo[n];return memo[n] = fib(n-1) + fib(n-2);}
};
# Python 遞歸 + 備忘錄
class Solution:def __init__(self):self.memo = {0: 0, 1: 1}def fib(self, n: int) -> int:if n in self.memo:return self.memo[n]self.memo[n] = self.fib(n-1) + self.fib(n-2)return self.memo[n]
  • 時間復雜度:O(n)
  • 空間復雜度:O(n)(遞歸棧 + 備忘錄)

對于 0 ≤ n ≤ 30,方法一足夠高效且實現簡單。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87194.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87194.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87194.shtml

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

相關文章

FOC學習筆記(5)內嵌式電機與表貼式電機的區別

1. 引言 在現代電機設計中&#xff0c;永磁同步電機&#xff08;Permanent Magnet Synchronous Motor, PMSM&#xff09;因其高效率、高功率密度和優異的動態性能&#xff0c;在工業、新能源汽車、航空航天等領域得到廣泛應用。根據永磁體在轉子中的安裝方式不同&#xff0c;永…

算法 按位運算

按位與&#xff08;Bitwise AND&#xff09;和按位異或&#xff08;Bitwise XOR&#xff09; 按位與&#xff08;&&#xff09; 按位與是對兩個數的二進制表示的每一位進行邏輯與操作。 規則&#xff1a;兩個對應位都為1時&#xff0c;結果位才為1&#xff0c;否則為0。…

python3GUI--基于PyQt5+SQLite3的網址審核系統(詳細圖文)

文章目錄 一&#xff0e;前言二&#xff0e;相關知識1.PyQt52.sqlite3 三&#xff0e;效果預覽1.登錄2.注冊3.普通用戶身份權限4.管理員身份權限 三、技術討論1.數據展示表格1. 更強的表現力和交互性&#xff08;前端功能豐富&#xff09;2. 數據處理效率更高&#xff08;支持大…

與后端現場聯調mock數據

當我們后端在現場沒辦法連后端本地就可以使用mock數據&#xff0c;模擬后端返回數據。使用工具&#xff1a;apifox 一、安裝好以后--新建接口 舉個栗子&#xff1a; 我想建個接口http://123.123.123.123:8080/api/login 二、 新建期望&#xff0c;返回固定值&#xff0c;否則…

C# 事件(發布者和訂閱者)

發布者和訂閱者 很多程序都有一個共同的需求&#xff0c;即當一個特定的程序事件發生時&#xff0c;程序的其他部分可以得到 該事件已經發生的通知。 發布者/訂閱者模式&#xff08;publisher/subscriber pattem&#xff09;可以滿足這種需求。在這種模式中&#xff0c;發布 …

RediSearch高性能全文搜索引擎

RediSearch 是 RedisLabs 團隊開發的一個高性能全文搜索引擎&#xff0c;可作為一個 Redis Module 運行在 Redis 上。 Redis7&#xff1a;百萬數據級Redis Search 超越 ElasticSearch Redis Search是基于Redis的全文搜索引擎模塊&#xff08;RediSearch&#xff09;&#xff0c…

菜譜大全——字符串處理藝術:從文本解析到高效搜索 [特殊字符][特殊字符]

目錄 前言一、現實場景二、技術映射2.1 基礎刀工&#xff1a;String類2.2 高效剁餡&#xff1a;StringBuilder2.3 精準雕刻&#xff1a;正則表達式 三、知識點呈現3.1 String vs StringBuilder vs StringBuffer3.2 正則表達式核心語法速查3.3 字符串拼接性能陷阱 四、代碼實現五…

webpack+vite前端構建工具 -答疑

webpack答疑 1 輸入webpack命令&#xff0c;執行的是全局版本還是本地版本的webpack 當在命令行窗口輸入webpack命令時&#xff0c;其執行優先級可通過以下步驟明確判斷&#xff1a; 1.1 【全局安裝優先機制】 執行原理&#xff1a;系統會按照環境變量PATH的順序逐級查找可執…

API接口開放平臺 Crabc 3.4 發布

Crabc 是一款 API 接口開發平臺&#xff0c;企業級接口管理、SQL2API 平臺。支持動態數據源、動態 SQL 和標簽&#xff0c; 支持接入&#xff08;mysql、oracle、達夢、TiDB、hive、es 和 mongodb&#xff09;等 SQL 或 NoSQL 數據源&#xff0c;在線可視化編寫 SQL 快速發布接…

PD快充協議芯片XSP04D支持全協議+支持串口通訊+支持與主板共用一個Type-C

隨著Type-C接口的充電器普及&#xff0c;市面上的PD充電器越來越多&#xff0c;小家電產品可不配充電器&#xff0c;使用Type-C接口&#xff0c;然后加入一顆PD協議取電協議芯片XSP08即可讓充電器/充電寶/車充等電源輸出9V/12V/15V/20V電壓給產品供電。 針對各種各樣的不同需求…

C# 高效加載txt文件內容

在 C# 中&#xff0c;高效加載 TXT 文件內容可以通過多種方法實現&#xff0c;具體方法的選擇取決于文件的大小和讀取需求。以下是一些常用的方法&#xff1a; 1. 使用 File.ReadAllText 如果文件比較小&#xff0c;并且你希望一行一行地讀取整個內容&#xff0c;可以使用 Fi…

(2)pytest執行用例的規則

1. 簡介 今天主要學習一下pytest的執行用例的規則。 2. 通過help幫助查看pytest如何使用 .查看pytest命令行參數&#xff0c;可以用pytest -h 或pytest --help查看 3. 用例設計原則 文件名以test_*.py文件和*_test.py以test_開頭的函數以Test開頭的類以test_開頭的方法所有的…

InnoDB數據頁

導讀&#xff1a; 我們已經知道了頁是數據庫存儲的基本單位&#xff0c;知道了一條行記錄的存儲格式是怎樣的&#xff0c;當數據越來越多時&#xff0c;那一條條行記錄具體又是怎么在頁中被組織起來的呢&#xff1f; 一、InnoDB數據頁結構 二、總結 1、一條條行數據是如何在數…

世賽背景下,中職物聯網應用與服務賽項實訓解決方案

一、世賽背景與物聯網應用賽項概述 1.1 世賽發展歷程及對中職教育的影響 世界技能大賽&#xff08;WorldSkills Competition&#xff0c;簡稱世賽&#xff09;自1950年創立以來&#xff0c;已經成為全球范圍內展示職業技能水平的重要賽事。截至2024年&#xff0c;世賽已成功舉…

【攻防篇】解決:阿里云docker 容器中自動啟動xmrig挖礦-- 實戰

文章目錄 場景一、問題二、原因三、解決方案1、控制臺處理2、 [清除與防護](https://blog.csdn.net/ladymorgana/article/details/148921668?spm1001.2014.3001.5501)1. 緊急處理&#xff1a;停止挖礦進程2. 清理被感染的容器3. 防護措施&#xff1a;防止再次被入侵4. 排查入侵…

飛算智造JavaAI:智能編程革命——AI重構Java開發新范式

文章目錄 引言&#xff1a;當傳統Java開發遇上AI一、技術架構解析1.1 核心架構圖1.2 關鍵技術棧 二、實戰演示&#xff1a;從需求到代碼的全AI輔助2.1 場景&#xff1a;電商優惠券系統開發2.2 代碼生成實例2.3 智能調試演示 三、與傳統開發模式對比測試3.1 基準測試數據3.2 典型…

[特殊字符] 分享裂變新姿勢:用 UniApp + Vue3 玩轉小程序頁面分享跳轉!

在如今流量成本日益攀升的移動互聯網時代&#xff0c;"用戶分享拉新" 成為了增長的重要策略。而微信小程序作為天然具備社交傳播力的平臺&#xff0c;提供了較完善的分享機制支持。本文將從實戰角度出發&#xff0c;手把手教你如何使用 uni-app Vue3 構建一個支持「…

[創業之路-458]:企業經營層 - 藍海戰略 - 重構價值曲線、整合產業要素、創造新需求

“重構價值曲線、整合產業要素、創造新需求”是藍海戰略中實現價值創新的核心路徑&#xff0c;它們構成了一個從內部優化到外部協同&#xff0c;再到市場顛覆的完整邏輯鏈條。以下從理論框架、實踐方法和企業案例三個維度展開分析&#xff1a; 一、重構價值曲線&#xff1a;打…

慢查詢引發對mysql索引的探索

目錄 一、索引分類 1.1 聚簇索引結構 1.2 非聚簇索引(二級索引) 1.3 主鍵索引 1.4 唯一索引 1.5 普通索引 1.6 前綴索引 1.7 聯合索引 1.8 索引下推 1.9 索引區分度 二、優化索引的方法 2.1 索引的特點 2.2 適合創建索引的情況 2.3 不適合創建索引的情況 2.4 優…

啟用不安全的HTTP方法

背景&#xff1a; 今天被安全檢測出一個這樣的問題&#xff1a;啟用不安全的HTTP方法。DELETE方法是用來調試web服務器連接的http方式&#xff0c;支持該方式的服務器文件可能被非法刪除&#xff1b;PUT方法用來向服務器提交文件&#xff1b;TRACE方法本用于客戶端測試到服務器…