My Sixty-Second Page - 斐波那契数列 - By Nicolas
這篇page是針對(duì)leetcode上的動(dòng)態(tài)規(guī)劃類題目所寫的。小尼先簡(jiǎn)單的跟大家說明一下動(dòng)態(tài)規(guī)劃這一個(gè)專題,也是小尼接下來會(huì)繼續(xù)寫的專題。小尼先說明一下解決動(dòng)態(tài)規(guī)劃的五大思想,首先就是我們需要知道dp數(shù)組的下標(biāo)的意義,也就是我們需要知道這個(gè)dp所定義的意義,以便于我們對(duì)后續(xù)的解題有對(duì)應(yīng)的思想,第二步就是我們需要知道遞推公式,不同的dp的題目的對(duì)應(yīng)的遞推公式有很大的區(qū)別,小尼在接下來的文章中會(huì)向大家一一說明的;第三步就是我們需要知道dp數(shù)組的初始化,也就是前面i為0或1時(shí)對(duì)應(yīng)的值為多少,我們一定需要了解清楚;第四步就是我們就是要對(duì)動(dòng)態(tài)規(guī)劃進(jìn)行對(duì)應(yīng)的遞歸;最后也就是第五步我們需要對(duì)dp數(shù)組輸出它的結(jié)果
小尼今天所寫的這篇page是針對(duì)leetcode上的509.斐波那契數(shù)列所寫的,小尼先簡(jiǎn)單的說明一下題目的要求,起始就是我們數(shù)學(xué)中所學(xué)的斐波那契數(shù)列的求和,首先我們需要知道的就是什么是斐波那契數(shù)列,就是第一個(gè)數(shù)字為0第二個(gè)數(shù)字為1,然后之后所有的數(shù)字都是前面兩個(gè)數(shù)字的和,并且一直不斷的進(jìn)行下去。我們int一個(gè)整數(shù),我們需要得到的就是改整數(shù)位的結(jié)果未多少。
首先小尼給出的代碼是動(dòng)態(tài)規(guī)劃的代碼,這個(gè)代碼也可以充分體現(xiàn)小尼上面所說的思想,接下來小尼先拉一下代碼:
class Solution {public int fib(int n) {if(n < 2){return n;}int p = 0, q = 0 , r = 1;for(int i = 2; i <= n; i++){p = q;q = r;r = p + q;}return r;} }小尼接下來簡(jiǎn)單的說明一下這道題各個(gè)步驟的思想,首先我們需要明確我們對(duì)應(yīng)的dp下的每個(gè)數(shù)組對(duì)應(yīng)的含義,對(duì)于這道題目還是比較簡(jiǎn)單的,因?yàn)檫@道題目的dp中對(duì)應(yīng)的每一個(gè)數(shù)據(jù)起始就是我們的第i個(gè)斐波那契數(shù),然后我們第二部需要明確的就是遞推公式,起始這里的遞推公式也不是很難,這里的遞推公式就是dp[i]=dp[i-1]+dp[i-2],然后就是需要明確我們的數(shù)組是如何變化的,在本題中就是運(yùn)用了for循環(huán)的方式進(jìn)行,第四步就是確定遞歸的遍歷,最后我們只需要返回遞歸的結(jié)果就可以了
小尼接下來給出純遞歸的方法小尼先拉一下代碼:
class Solution {public int fib(int n) {if (n == 0) return 0;if( n <= 2) return 1;return fib(n - 1) + fib(n - 2);} }這邊小尼給出的純遞歸的方法小尼認(rèn)為絕大多數(shù)應(yīng)該都寫過對(duì)應(yīng)的。
希望上面的代碼可以給小伙伴們帶來幫助~~~
總結(jié)
以上是生活随笔為你收集整理的My Sixty-Second Page - 斐波那契数列 - By Nicolas的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器硬盘型号详解
- 下一篇: 说说Stack Overflow和Quo