刷題系列 - 計算爬樓梯不同步數的方法數
這個題目是這樣的,如果一次可以向上移動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
- 程式碼隨想錄day32 || 509 斐波那契數列,70 爬樓梯,746 最小代價爬樓梯
- [演算法] 一、爬樓梯演算法
- leetcode 70 爬樓梯LeetCode
- [Python手撕]爬樓梯Python
- LeetCode每日一題:爬樓梯(No.70)LeetCode每日一題
- 使用 JavaScript 解決經典爬樓梯問題JavaScript
- 谷歌子公司推出新款機器人,可以爬樓梯擦樓梯谷歌機器人
- Climbing Stairs 爬樓梯問題,每次可以走1或2步,爬上n層樓梯總方法 (變相fibonacci)AI
- [CareerCup] 9.1 Climbing Staircase 爬樓梯AI
- 746. 使用最小花費爬樓梯
- iOS 開發刷題系列三:NSString 引用計數iOS
- 我用演算法學golang(爬樓梯)演算法Golang
- 爬樓梯(LintCode Climbing Stairs)AI
- 程式碼隨想錄演算法訓練營 | 動態規劃,509. 斐波那契數,70. 爬樓梯, 746. 使用最小花費爬樓梯演算法動態規劃
- C++遞迴演算法之爬樓梯C++遞迴演算法
- LCR 088. 使用最小花費爬樓梯
- [Python手撕]使用最小花費爬樓梯Python
- 刷題系列 - 實現一個指數運算方法,對遞迴次數和運算時間有約束。遞迴
- 程式碼隨想錄演算法訓練營第三十八天 | 746. 使用最小花費爬樓梯,、70. 爬樓梯,509. 斐波那契數演算法
- 程式碼隨想錄演算法訓練營第35天 | 動態規劃1:509.斐波那契數、70.爬樓梯、746.使用最小花費爬樓梯演算法動態規劃
- LeetCode-746 使用最小花費爬樓梯LeetCode
- 讓我們一起啃演算法----爬樓梯演算法
- 增補部落格 第十九篇 python 爬樓梯Python
- 【數值計算方法】數值積分&微分
- 計算請假天數JavaScript方法JavaScript
- 上樓梯演算法演算法
- Java中計算整數中唯一數字數量的3種方法Java
- 超大整數的加減乘除計算方法
- 面試官在“逗”你係列:到底應該怎麼爬樓梯?!面試
- 一個浮點數計算的問題
- 【力扣】數樓梯(動態規劃)(看來高精度不學不行了)力扣動態規劃
- 【數值計算方法】常微分方程數值解-數值實驗
- js中浮點數計算常用方法JS
- Leetcode刷題——求眾數LeetCode
- 力扣刷題——2398. 預算內的最多機器人數目力扣機器人
- 【數值計算方法】線性方程組的迭代解法-數值實驗