LeetCode 70 爬樓梯

題目:
假設(shè)你正在爬樓梯案训。需要 n 階你才能到達樓頂买置。
每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢强霎?
注意:給定 n 是一個正整數(shù)忿项。
示例 1:
輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂

  1. 1 階 + 1 階
  2. 2 階
    示例 2:
    輸入: 3
    輸出: 3
    解釋: 有三種方法可以爬到樓頂。
  3. 1 階 + 1 階 + 1 階
  4. 1 階 + 2 階
  5. 2 階 + 1 階

看到這題, 腦子里想到的就是動態(tài)規(guī)劃, 什么是動態(tài)規(guī)劃, 一言以蔽之就是, 記住你已經(jīng)做過的計算, 在已經(jīng)計算過的基礎(chǔ)上疊加, 避免重復(fù)的計算.

首先, 不妨將階梯數(shù)想象成一個全是1組成的數(shù)組, 比如8級階梯, 就是:
[1, 1, 1, 1, 1, 1, 1, 1]
那么不同的爬樓梯方案就類似于:
[2, 1, 1, 1, 1, 1, 1], [1, 2, 1, 1, 1, 1, 1], [2, 2, 1, 1, 1, 1] ......
當(dāng)只有一個階梯走跨兩步時, 就可能出現(xiàn)7中情況, 即:
[2, 1, 1, 1, 1, 1, 1], [1, 2, 1, 1, 1, 1, 1], [1, 1, 2, 1, 1, 1, 1], [1, 1, 1, 2, 1, 1, 1] ......
而當(dāng)兩個階梯走跨兩步時, 可能出現(xiàn)如下情況:
[2, 2, 1, 1, 1, 1], [2, 1, 2, 1, 1, 1], [2, 1, 1, 2, 1, 1], [2, 1, 1, 1, 2, 1], [2, 1, 1 ,1, 1, 2],
[1, 2, 2, 1, 1, 1], [1, 2, 1, 2, 1, 1], [1, 2, 1, 1, 2, 1], [1, 2, 1, 1, 1, 2],
[1, 1, 2, 2, 1, 1], [1, 1, 2, 1, 2, 1], [1, 1, 2, 1, 1, 2]
......
注意到這里兩次跨兩步的情況都是在一次跨兩步的基礎(chǔ)下得的出來的, 具體就是在一次跨兩步的那個兩步之后選擇跨兩步的位置, 這樣避免出現(xiàn)重復(fù)的跨步情況, 又能完整遍歷出結(jié)果, 基于這個方案, 我寫出了第一種算法

  func climbStairs(_ n: Int) -> Int {
        if n > 0 {
            var count = 1
            for i in 1..<n {

                count += self.climbStairs(n - i - 1)
            }
            return count
        } else {
             
            return 1
        }  
  }

每個臺階總數(shù)全為1, 是一種情況, 然后在這個全為一的數(shù)組中湊出一個2,
得到多種情況, 在每種情況下, 將湊出的那個2去掉, 使2之后剩下的1成為一個新的值, 向下遞歸, 直到n = 0, 這個時候我們知道, 只有1種情況

但是很不幸這種方式超時了, 因為里面還是包含了太多的重復(fù)計算
以數(shù)字8為例:
當(dāng)我們傳入一個8, 他將遞歸計算值為6, 5, 4, 3, 2, 1, 0的結(jié)果
而計算6, 則將遞歸計算4, 3, 2, 1, 0的結(jié)果
計算5將計算3, 2, 1, 0的結(jié)果
...
可以看到, 0的結(jié)果, 1的結(jié)果, 2的結(jié)果將被重復(fù)計算多次, 而這些計算是不需要的
于是我重新觀察這種方案, 當(dāng)n = 0時, 可以直接得出1, 當(dāng)n = 1時可以直接得出1, 當(dāng)n = 2時, 可以視為 1 + (n = 0), 以此類推:
n = 0: 1
n = 1: 1
n = 2: 1 + (n = 0)
n = 3: 1 + (n = 1) + (n = 0)
n = 4: 1 + (n = 2) + (n = 1) + (n = 0)
n = 5: 1 + (n = 3) + (n = 2) + (n = 1) + (n = 0)
...
可以觀察到:
n = 4: (n = 3) + (n = 2)
n = 5: (n = 4) + (n = 3)
于是可以通過累加法, 從n = 2開始
記下n = 0 和 n = 1
n = 2 就等于 (n = 0) + (n = 1)
記下n = 1 和 n = 2
n = 3 就等于 (n = 2) + (n = 1)
記下n = 2 和 n = 3
n = 4 就等于 (n = 3) + (n = 2)
...
最終得出答案

    func climbStairs(_ n: Int) -> Int {
        
        if n > 1 {
            var lastTwo = 1
            var addCount = 1
            for index in 2...n {
                let tLast = lastTwo
                lastTwo = addCount
                addCount += tLast
            }
            return addCount
        } else {
            return 1
        }   
    }

提交通過

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脆栋,一起剝皮案震驚了整個濱河市倦卖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌椿争,老刑警劉巖怕膛,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異秦踪,居然都是意外死亡褐捻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門椅邓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柠逞,“玉大人,你說我怎么就攤上這事景馁“遄常” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵合住,是天一觀的道長绰精。 經(jīng)常有香客問我,道長透葛,這世上最難降的妖魔是什么笨使? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮僚害,結(jié)果婚禮上硫椰,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好靶草,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布蹄胰。 她就那樣靜靜地躺著,像睡著了一般爱致。 火紅的嫁衣襯著肌膚如雪烤送。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天糠悯,我揣著相機與錄音,去河邊找鬼妻往。 笑死互艾,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的讯泣。 我是一名探鬼主播纫普,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼好渠!你這毒婦竟也來了昨稼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拳锚,失蹤者是張志新(化名)和其女友劉穎假栓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霍掺,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡匾荆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了杆烁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牙丽。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖兔魂,靈堂內(nèi)的尸體忽然破棺而出烤芦,到底是詐尸還是另有隱情,我是刑警寧澤析校,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布构罗,位于F島的核電站,受9級特大地震影響勺良,放射性物質(zhì)發(fā)生泄漏绰播。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一尚困、第九天 我趴在偏房一處隱蔽的房頂上張望蠢箩。 院中可真熱鬧,春花似錦、人聲如沸谬泌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掌实。三九已至陪蜻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贱鼻,已是汗流浹背宴卖。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留邻悬,地道東北人症昏。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像父丰,于是被迫代替她去往敵國和親肝谭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

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

  • 寫在前沿:本文代碼均使用C語言編寫 Description:假設(shè)你正在爬樓梯蛾扇。需要 n 階你才能到達樓頂攘烛。每次你可...
    小黃大大閱讀 283評論 0 0
  • 原題地址:https://leetcode-cn.com/problems/climbing-stairs/ 題目...
    IgorNi閱讀 447評論 0 0
  • 題目: 假設(shè)你正在爬樓梯。需要 n 階你才能到達樓頂镀首。 每次你可以爬 1 或 2 個臺階坟漱。你有多少種不同的方法可以...
    SenwinFeng閱讀 590評論 0 0
  • 問題描述 你正在爬樓梯。需要 n 步你才能到達頂部蘑斧。 每次你可以爬 1 或 2 個臺階靖秩。你有多少種不同的方式可以爬...
    Dy1an閱讀 490評論 0 0
  • 學(xué)生寧*運動員麥 私設(shè)嚴(yán)重 麥克沃伊是個非常爽朗的大男孩,拋去了他的運動明星身份竖瘾,私底下也是一個非常愛鬧愛瘋的主沟突,...
    玘子閱讀 118評論 0 0