刷題系列 - 計算爬樓梯不同步數的方法數
這個題目是這樣的,如果一次可以向上移動1格或者2格,給出一定格數的梯子,有多少種移動方法可以剛好到頂。
比如給出2格梯子,有兩種方法,一個是 1->1;還有是 一次 走2 格;
給出3格梯子,有三種方法,一個是1->1->1; 還有1->2, 還有2->1。
這個題目看起來好像很複製的樣子,分析下,其實本質就是一個斐波拉契陣列,一個n格的梯子方法數,可以是n-1 和n-2 的方法數之和。
程式碼也就很簡單了,遞迴既可以,這裡使用一個課程中提到的針對遞迴提速的快取字典技巧;因為在遞迴分解時候,往往很多分解計算要跑很多次,把第一次的結果放在一個字典裡面快取使用可以大大提高速度。在實際使用中,可以使用functools.lru_cache這樣工具,用裝飾器形式更快捷的實現。實際提交程式碼後,顯示執行速度也是超過85%的結果。
class Solution: cacheTable = {} def climbStairs(self, n: int) -> int: if n == 1: return 1 elif n == 2: return 2 else: if n in self.cacheTable.keys(): return self.cacheTable[n] else: stepCount = self.climbStairs(n-1) + self.climbStairs(n-2) self.cacheTable[n] = stepCount return stepCount
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2676927/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- (39/60)DP基礎、斐波那契數、爬樓梯、用最小花費爬樓梯
- LeetCode 70題 爬樓梯 -- JavaScriptLeetCodeJavaScript
- [演算法] 一、爬樓梯演算法
- leetcode 70 爬樓梯LeetCode
- LeetCode每日一題:爬樓梯(No.70)LeetCode每日一題
- 使用 JavaScript 解決經典爬樓梯問題JavaScript
- 谷歌子公司推出新款機器人,可以爬樓梯擦樓梯谷歌機器人
- Climbing Stairs 爬樓梯問題,每次可以走1或2步,爬上n層樓梯總方法 (變相fibonacci)AI
- [CareerCup] 9.1 Climbing Staircase 爬樓梯AI
- iOS 開發刷題系列三:NSString 引用計數iOS
- 我用演算法學golang(爬樓梯)演算法Golang
- 爬樓梯(LintCode Climbing Stairs)AI
- C++遞迴演算法之爬樓梯C++遞迴演算法
- LCR 088. 使用最小花費爬樓梯
- 刷題系列 - 實現一個指數運算方法,對遞迴次數和運算時間有約束。遞迴
- 程式碼隨想錄演算法訓練營第三十八天 | 746. 使用最小花費爬樓梯,、70. 爬樓梯,509. 斐波那契數演算法
- LeetCode-746 使用最小花費爬樓梯LeetCode
- 讓我們一起啃演算法----爬樓梯演算法
- 計算請假天數JavaScript方法JavaScript
- 上樓梯演算法演算法
- 面試官在“逗”你係列:到底應該怎麼爬樓梯?!面試
- Java中計算整數中唯一數字數量的3種方法Java
- 超大整數的加減乘除計算方法
- 【力扣】數樓梯(動態規劃)(看來高精度不學不行了)力扣動態規劃
- 一個浮點數計算的問題
- Leetcode刷題——求眾數LeetCode
- js中浮點數計算常用方法JS
- 38天【程式碼隨想錄演算法訓練營34期】第九章 動態規劃part01 (● 理論基礎 ● 509. 斐波那契數 ● 70. 爬樓梯 ● 746. 使用最小花費爬樓梯)演算法動態規劃
- [MySQLFAQ]系列–mysql如何計算開啟檔案數MySql
- JavaScript原生實現樓梯外掛JavaScript
- 樓梯導航/線上諮詢特效特效
- 記一次 TX_Company 的測試開發一面面試題目 (演算法題:第 77 題-爬樓梯)面試題演算法
- 看板數量的計算
- 計算水仙花數運算超時問題
- Python演算法:如何解決樓梯臺階問題Python演算法
- Leetcode刷題之 【最近的請求次數】LeetCode
- java 日期加減天數、月數、年數的計算方式Java
- [LeetCode 刷題] 1. 兩數之和LeetCode