java遍歷斐波納契數列_詳解循環、迭代、遞歸、分治(Leet Code 509 斐波那契數列),實際運用...

572ed1cb7ce0aaf6cca2be17732151dd.png

Multiple solutions of Fibonacci (Python or Java)

本章是用英文寫的,作為或想成為一名優秀的攻城獅,習慣閱讀英文文檔將使你受益良多。例如更好的查看最新版的官方文檔、與國外友人交流、等等 其實英文的生詞也并不多,其中90%的英文都在代碼里,當然這其中的精華也在代碼里,代碼相信大部分伙計還是都可以看懂.所以,請不要驚慌。對于English,讓我們一起取克服它、習慣它、擁抱它。然后把它錘倒在地,相信你可以的。 GO, Go, GO 如果實在不行,各種頁面翻譯來一手。莫慌,這都是小場面,啥都不是事兒,好吧

Violence law(Top-down)

It can be solved directly according to the known conditions (f (0) = 0, f (1) = 1 F(N) = F(N - 1) + F(N - 2), for N > 1)

Python Code

1

2

3

4

class Solution:

def fib(self, N: int) -> int:

if N == 1 or N == 2: return N

return self.fib(N - 1) + self.fib(N - 2)

Java Code

1

2

3

4

5

6

7

8

9

10

11

12

class Solution {

public int fib(int N) {

if (N == 1 || N == 2) return 1;

return fib(N - 1) + fib(N - 2);

}

}

class Solution {

public int fib(int N) {

return N < 2 ? N : fib(N - 1) + fib(N - 2);

}

}

Violence law add cache(Pruning)

We know that if we don’t do any processing, we will repeat too many calculations, which is very bad The processing idea will avoid repeated calculation

Python Code

1

2

3

4

5

class Solution2:

@functools.lru_cache()

def fib(self, N: int) -> int:

if N <= 1: return N

else: return self.fib(N - 1) + self.fib(N - 2)

Java Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

class Solution {

private Integer[] cache = new Integer[31];

public int fib(int N) {

if (N <= 1) return N;

cache[0] = 0;

cache[1] = 1;

return memoize(N);

}

public int memoize(int N) {

if (cache[N] != null) return cache[N];

cache[N] = memoize(N-1) + memoize(N-2);

return memoize(N);

}

}

Divide and conquer solution

Recursion, iteration, divide and conquer, backtracking, they do not have a clear distinction Recursion:The core idea is to govern separately and unify the officials

1

2

3

4

5

6

7

class Solution:

def fib(self, N: int) -> int:

memo = {}

if N < 2: return N

if N-1 not in memo: memo[N-1] = self.fib(N-1)

if N-2 not in memo: memo[N-2] = self.fib(N-2)

return memo[N-1] + memo[N-2]

Dynamic recursion(Bottom up)

Basic solutions

More initial value, continuous dynamic recursive

Python Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

class Solution:

def fib(self, N: int) -> int:

if N < 2: return N

dp = [0 for _ in range(N + 1)]

dp[0], dp[1] = 0, 1

for i in range(2, N + 1):

dp[i] = dp[i - 1] + dp[i - 2]

return dp[- 1]

class Solution:

def fib(self, N: int) -> int:

if N == 0: return 0

memo = [0,1]

for _ in range(2,N+1):

memo = [memo[-1], memo[-1] + memo[-2]]

return memo[-1]

Java Code

1

2

3

4

5

6

7

8

9

10

11

12

13

class Solution {

public int fib(int N) {

if (N <= 1) return N;

if (N == 2) return 1;

int curr = 0, prev1 = 1, prev2 = 1;

for (int i = 3; i <= N; i++) {

curr = prev1 + prev2;

prev2 = prev1;

prev1 = curr;

}

return curr;

}

}

Use better base types (tuples) to improve performance

1

2

3

4

5

6

7

class Solution:

def fib(self, N: int) -> int:

if N == 0: return 0

memo = (0,1)

for _ in range(2,N+1):

memo = (memo[-1], memo[-1] + memo[-2])

return memo[-1]

Better solutions

Python Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

class Solution:

def fib(self, N: int) -> int:

curr, prev1, prev2 = 0, 1, 1

for i in range(3, N + 1):

curr = prev1 + prev2

prev2 = prev1

prev1 = curr

return curr

class Solution5:

def fib(self, N: int) -> int:

prev, now = 0, 1

for i in range(N):

prev, now = now, now + prev

return prev

Java Code

1

2

3

4

5

6

7

8

9

10

11

12

13

class Solution {

public int fib(int N) {

if (N == 0) return 0;

if (N == 2 || N == 1) return 1;

int prev = 1, curr = 1;

for (int i = 3; i <= N; i++) {

int sum = prev + curr;

prev = curr;

curr = sum;

}

return curr;

}

}

Mathematical conclusion method

Python Code

1

2

3

4

5

class Solution:

def fib(self, N: int) -> int:

sqrt5 = 5 ** 0.5

fun = pow((1 + sqrt5) / 2, n + 1) - pow((1 - sqrt5) / 2, n + 1)

return int(fun / sqrt5)

Java Code

1

2

3

4

5

6

class Solution {

public int fib(int N) {

double sqrt5 = (1 + Math.sqrt(5)) / 2;

return (int)Math.round(Math.pow(sqrt5, N)/ Math.sqrt(5));

}

}

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

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

相關文章

java棧內存是先進后出嗎_java堆內存與棧內存區別

棧(stack):是一個先進后出的數據結構,通常用于保存方法(函數)中的參數,局部變量. 在java中,所有基本類型和引用類型都在棧中存儲.棧中數據的生存空間一般在當前scopes內(就是由{...}括起來的區域).棧的優勢是&#xff0c;存取速度比堆要快&#xff0c;僅次于直接位于CPU中的寄存…

主頁面功能的java_6-04-項目實戰-主頁面顯示當前用戶退出功能實現

教程列表&#xff1a;1-01-servlet學習-HTTP協議的概念作用和特點1-02-servlet學習-HTTP協議的交互流程和請求格式和請求方式1-03-servlet學習-HTTP協議的響應格式和常見狀態碼1-04-servlet學習-服務器介紹&tomcat服務器的安裝和驗證1-05-servlet學習-第一個web項目1-06-se…

java 二分查找 排序_java 冒泡排序 二分查找

下面這個程序是先定義一個整型數組&#xff0c;然后將其中的元素反序賦值&#xff0c;再用冒泡排序進行排序以后用二分查找來查找其中是否有某個數&#xff0c;返回值為-1時表示這個數可能小于這個數組的最小值或大小這個數組的最大值&#xff0c;-2表示這個數比這個數組的最小…

php 數組設置為空,PHP數組設置空值

如果沒有數據存在&#xff0c;如何將數組值設置為null&#xff1f;PHP數組設置空值以下是我的PHP陣列和我JSON編碼 -{"title":"Impalz-Marketing","type":"Business Details","version":"1.0","login":…

什么是寫一個java類,Java什么是類?class的相關介紹

本章給大家帶來Java什么是類&#xff1f;class的相關介紹&#xff0c;讓大家了解關于類(class)的一些知識。有一定的參考價值&#xff0c;有需要的朋友可以參考一下&#xff0c;希望對你有所幫助。class Point{constructor(){}toString(){}}console.log(Object.keys(Point.prot…

windows php sqlite,如何在Apache 2.4(Windows 7)上為PHP 5.6.14配置SQLite3?

我在Windows 7上,在Apache 2.4上使用PHP 5.6.14版,我正在嘗試訪問SQLite3數據庫.我正在……致命錯誤&#xff1a;找不到類“SQLite3”在這里你是一個簡單的PHP代碼…$db new SQLite3(phpdb);if ($db) {$db->query("CREATE TABLE dogbreeds (Name VARCHAR(255), MaxAge…

php 國密 簽名,關于php國密SM3簽名算法

推薦&#xff1a;《PHP視頻教程》php國密SM3簽名算法代碼地址github.com/lizhichao/sm安裝composer require lizhichao/one-sm使用require __DIR__ . /vendor/autoload.php; // 字符串簽名 echo OneSmSm3::sign(abc) . PHP_EOL; echo OneSmSm3::sign(str_repeat("adfas哈哈…

matlab狀態方程 傳遞函數 可控性,實驗一matlab系統的傳遞函數和狀態空間表達式的轉換...

實驗一 MATLAB 系統的傳遞函數和狀態空間表達式的轉換一、 實驗目的1、學習多變量系統狀態空間表達式的建立方法&#xff1b;2、通過編程、上機調試&#xff0c;掌握多變量系統狀態空間表達式與傳遞函數之間相互轉換的方法&#xff1b;3、掌握相應的MATLAB 函數。二、 實驗原理…

php里h和h的區別嗎,編碼h264h和h264b有什么區別

區別如下&#xff1a;1、版本H.265是新的編碼協議&#xff0c;也即是H.264的升級版。H.265標準保留H.264原來的某些技術&#xff0c;同時對一些相關的技術加以改進。新技術使用先進的技術用以改善碼流、編碼質量、延時和算法復雜度之間的關系&#xff0c;達到最優化設置。2、儲…

mysql5.1怎么備份,MySQL 5.1升級到MySQL 5.5的步驟

mysql 5.5已經出來有一段時間&#xff0c;性能有明顯提升&#xff0c;特別是對多核CPU的支持與TPS性能的提升。上周博主介紹了linux下編譯安裝mysql 5.5的步驟&#xff0c;安裝不出意外基本沒有問題。不過可能很多朋友和我一樣一直用的是mysql 5.1&#xff0c;現在想把數據庫升…

php file del 方法,php怎么遍歷文件刪除指定字符

php遍歷文件刪除指定字符的實現方法&#xff1a;首先創建一個PHP示例文件&#xff1b;然后通過“function del($getstr){…}”方法刪除指定目錄下所有指定文件中指定字符串即可。本文操作環境&#xff1a;windows7系統、PHP7.1版&#xff0c;DELL G3電腦php實現遍歷目錄并刪除指…

event類型 php,深入解析PHP的Laravel框架中的event事件操作

有時候當我們單純的看 Laravel 手冊的時候會有一些疑惑&#xff0c;比如說系統服務下的授權和事件&#xff0c;這些功能服務的應用場景是什么&#xff0c;其實如果沒有經歷過一定的開發經驗有這些疑惑是很正常的事情&#xff0c;但是當我們在工作中多加思考會發現有時候這些服務…

php 抽象類 靜態方法嗎,php中的抽象類和靜態方法是什么

php中的抽象類是指&#xff1a;在class前加了abstract關鍵字且存在抽象方法的類&#xff0c;它不能被直接實例化&#xff1b;靜態方法是指&#xff1a;被static關鍵字修飾的方法&#xff0c;靜態方法用于操作靜態屬性。抽象類抽象類是指在 class 前加了 abstract 關鍵字且存在抽…

python目錄結構生成庫,使用CMake構建平臺無關的目錄結構

我試圖為我的跨平臺項目創建一個目錄結構&#xff0c;但遇到了一些問題。我已經讓CMake確定了放置庫和可執行文件的適當位置&#xff0c;但這種結構僅適用于Windows。在我的結構如下所示&#xff1a;項目目錄垃圾箱可執行文件圖書館圖書館Python增壓模塊python腳本這在Windows上…

centos 怎樣下載php,centos下怎樣安裝軟件

centos下安裝軟件的方法是&#xff1a;centos安裝軟件的命令1、rpm包的安裝1.安裝一個包# rpm -ivh2.升級一個包# rpm -Uvh3.移走一個包# rpm -e4.安裝參數--force 即使覆蓋屬于其它包的文件也強迫安裝--nodeps 如果該RPM包的安裝依賴其它包&#xff0c;即使其它包沒裝&#xf…

php fpm 安裝配置,php php+fpm安裝配置

sudo apt - get install php5 - cgi php5 - mysql php5 - fpm php5 - curl php5 - gd php5 - idn php - pear php5 - imagick php5 - imap php5 - mcrypt php5 - mhash php5 - ming php5 - pspell php5 - recode php5 - snmp php5 - tidy php5 - xmlrpc php5 - xsl打開 /etc/ph…

php post 微信沙箱,微信支付平臺錯誤:獲取沙箱密鑰失敗,確保交易密鑰是

按官方提示進行獲取沙箱密鑰的時候&#xff0c;久試不爽&#xff0c;總是提示錯誤 &#xff1a;“獲取沙箱密鑰失敗&#xff0c;確保交易密鑰是否正確”。這個純粹是微信平臺挖的坑呀&#xff0c;文檔沒有詳細的進行一些講解&#xff0c;也沒有提示需要key&#xff0c;下面來說…

shell腳本執行oracle刪除表,shell腳本操作oracle刪除表空間、創建表空間、刪除用戶...

oracle下表空間的導出&#xff0c;用戶的刪除&#xff0c;表空間刪除&#xff0c;用戶新建&#xff0c;表空間新建&#xff0c;數據導入的shell使用非oracle用戶執行該腳本參數說名$1&#xff1a;base表空間的用戶名$2&#xff1a;同步表空間的用戶名使用場景測試用&#xff0c…

PHP標題獲取數據庫內容,php – 如何從數據庫獲取項目的標題并將其發送到CodeIgniter中的標題模板...

嘗試這個>型號更改>控制器已更改。在模型中function get_card($card){$query $this->db->query("SELECT * FROM table_name WHERE creditcards $card ");$result $query->result_array();$count count($result); # Newif(empty($count)){ # Newre…

php教程調用數據庫,PHP數據庫調用類調用實例,php數據庫調用實例_PHP教程

PHP數據庫調用類調用實例&#xff0c;php數據庫調用實例config("dnsaaa;uidsa;pwdsa;dbnametest");//3.選擇數據庫$dbname $db->select_db("test");//4.設置允許調試$db->debug true;//5.執行一條不返回結果的SQL語句$db->execute("insert…