劍指offer 動(dòng)態(tài)規(guī)劃 斐波拉契數(shù)列 跳臺(tái)階 變態(tài)跳臺(tái)階 矩陣覆蓋 Python and C++

劍指offer 動(dòng)態(tài)規(guī)劃 Python and C++

1屡江、斐波拉契數(shù)列
2单旁、跳臺(tái)階
3腰涧、變態(tài)跳臺(tái)階
4、矩陣覆蓋

斐波拉契數(shù)列

題目描述

大家都知道斐波那契數(shù)列犯祠,現(xiàn)在要求輸入一個(gè)整數(shù)n旭等,請(qǐng)你輸出斐波那契數(shù)列的第n項(xiàng)(從0開始,第0項(xiàng)為0)衡载。
n<=39

思路

斐波拉契數(shù)列:F(1)=1搔耕,F(xiàn)(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)

只需定義兩個(gè)整型變量,b表示后面的一個(gè)數(shù)字弃榨,a表示前面的數(shù)字即可菩收。每次進(jìn)行的變換是: a,b = b,a+b

python

# -*- coding:utf-8 -*-
class Solution:
    def Fibonacci(self, n):
        # write code here
        if n<=0:
            return 0
        a = b = 1
        for i in range(2, n):
            a, b = b, a+b
        return b

C++

class Solution {
public:
    int Fibonacci(int n) {
        if(n<=0)
            return 0;
        int a =1;
        int b = 1;
        for(int i=2;i<n;i++)
        {
            int temp;
            temp = a +b;
            a = b;
            b = temp;
        }
        return b;
    }
};

跳臺(tái)階

題目描述

一只青蛙一次可以跳上1級(jí)臺(tái)階,也可以跳上2級(jí)鲸睛。求該青蛙跳上一個(gè)n級(jí)的臺(tái)階總共有多少種跳法(先后次序不同算不同的結(jié)果)娜饵。

思路

其實(shí)和斐波拉契差不多,青蛙上第一個(gè)臺(tái)階的時(shí)候官辈,是一種方法箱舞,第二個(gè)臺(tái)階的時(shí)候是兩種分法,第一種就是拳亿,走兩個(gè)一階梯晴股,或者一次走兩個(gè)階梯,兩種方法肺魁。第三個(gè)臺(tái)階的時(shí)候电湘,是從第一個(gè)臺(tái)階的方法,加上從第二個(gè)臺(tái)階來的鹅经,

python

# -*- coding:utf-8 -*-
class Solution:
    def jumpFloor(self, number):
        # write code here
        if number<=0:
            return 0
        if number==1:
            return 1
        a = 1
        b = 2
        for i in range(2, number):
            a , b = b, a+b
        return b

C++

class Solution {
public:
    int jumpFloor(int number) {
        if (number==0)return 0;
        if (number==1)return 1;
        if (number==2) return 2;
        int b=2;
        int a=1;
        int temp;
        for(int i=3;i<=number;i++)
        {
            temp = a + b;
            a = b;
            b = temp;
        }
        return temp;
    }
};

變態(tài)跳臺(tái)階

題目描述

一只青蛙一次可以跳上1級(jí)臺(tái)階寂呛,也可以跳上2級(jí)……它也可以跳上n級(jí)。求該青蛙跳上一個(gè)n級(jí)的臺(tái)階總共有多少種跳法瘾晃。

思路

n=0時(shí),f(n)=0昧谊;n=1時(shí),f(n)=1;n=2時(shí),f(n)=2酗捌;假設(shè)到了n級(jí)臺(tái)階呢诬,我們可以n-1級(jí)一步跳上來,也可以不經(jīng)過n-1級(jí)跳上來胖缤,所以f(n)=2*f(n-1)尚镰。

推公式也能得出:

n = n時(shí):f(n) = f(n-1)+f(n-2)+...+f(n-(n-1)) + f(n-n) = f(0) + f(1) + f(2) + ... + f(n-1)

由于f(n-1) = f(0)+f(1)+f(2)+ ... + f((n-1)-1) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2)

所以f(n) = f(n-1)+f(n-1)=2*f(n-1)

python

# -*- coding:utf-8 -*-
class Solution:
    def jumpFloorII(self, number):
        # write code here
        if number<=0:
            return 0
        elif number ==1:
            return 1
        a = 1;
        for i in range(1, number):
            b = a*2
            a = b
        return b
            

C++

class Solution {
public:
    int jumpFloorII(int number) {
        if (number<=0)
            return 0;
        else if (number == 1)
            return 1;
        int a = 1;
        int b = 2;
        for(int i = 1; i<number; i++)
        {
            b = 2*a;
            a = b;
        }
        return b;
    }
};

矩陣覆蓋

題目描述

我們可以用21的小矩形橫著或者豎著去覆蓋更大的矩形。請(qǐng)問用n個(gè)21的小矩形無重疊地覆蓋一個(gè)2*n的大矩形哪廓,總共有多少種方法狗唉?

思路

和跳臺(tái)階的一樣的思路,或者看這個(gè)人寫的挺好的涡真。
https://www.nowcoder.com/questionTerminal/72a5a919508a4251859fb2cfb987a0e6?answerType=1&f=discussion

python

# -*- coding:utf-8 -*-
class Solution:
    def rectCover(self, number):
        # write code here
        if number<=0:
            return 0
        if number==1:
            return 1
        a = 1
        b = 2
        for i in range(2, number):
            a , b = b, a+b
        return b

C++

class Solution {
public:
    int rectCover(int number) {
        if (number==0)return 0;
        if (number==1)return 1;
        if (number==2) return 2;
        int b=2;
        int a=1;
        int temp;
        for(int i=3;i<=number;i++)
        {
            temp = a + b;
            a = b;
            b = temp;
        }
        return temp;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末分俯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哆料,更是在濱河造成了極大的恐慌缸剪,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件东亦,死亡現(xiàn)場離奇詭異杏节,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門奋渔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來镊逝,“玉大人,你說我怎么就攤上這事嫉鲸〕潘猓” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵玄渗,是天一觀的道長座菠。 經(jīng)常有香客問我,道長捻爷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任份企,我火速辦了婚禮也榄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘司志。我一直安慰自己甜紫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布骂远。 她就那樣靜靜地躺著囚霸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪激才。 梳的紋絲不亂的頭發(fā)上拓型,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音瘸恼,去河邊找鬼劣挫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛东帅,可吹牛的內(nèi)容都是我干的压固。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼靠闭,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼帐我!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起愧膀,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤拦键,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后檩淋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體矿咕,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碳柱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捡絮。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖莲镣,靈堂內(nèi)的尸體忽然破棺而出福稳,到底是詐尸還是另有隱情,我是刑警寧澤瑞侮,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布的圆,位于F島的核電站,受9級(jí)特大地震影響半火,放射性物質(zhì)發(fā)生泄漏越妈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一钮糖、第九天 我趴在偏房一處隱蔽的房頂上張望梅掠。 院中可真熱鬧,春花似錦店归、人聲如沸阎抒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽且叁。三九已至,卻和暖如春秩伞,著一層夾襖步出監(jiān)牢的瞬間逞带,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國打工纱新, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掰担,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓怒炸,卻偏偏與公主長得像带饱,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子阅羹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容