Leetcode 70. Climbing Stairs

更新 發佈閱讀 4 分鐘

這是一題關於 Dynamic Programming, DP 的問題
就是把一個問題拆成多個子問題一直拆解下去

題目是這樣:
爬梯子,最多只能腳跨 1 格或是 2 格(腳不夠長)
階梯有 n 階,你最多有多少方式可以跨完

範例是:

Input: n = 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps
Input: n = 3
Output: 3
Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

就是一個看組合多少
我們可以看到規律是一開始一定有 1 或 2 出發,下一階就是 n - 1, n - 2

假設是 5 階
我若走 1 階就還剩 4 階 ( 5 - 1 )
我若走 2 階就還剩 3 階 ( 5 - 2 )

無論我前面走了多少階層,我剩 3 階的步數都一樣 (只是舉個數字範例,這裡可以是 x

例如:
我總共 8 階,我走到剩下 3 階的時候就代表我剩下 3 種解法 (看範例)
我總共 19231092830 階,我走到剩下 3 階的時候就代表我剩下 3 種解法

所以我們可以從前面開始算,接著我們把它存到 dp 裡面就不用重複計算
不論你在第幾階,你就是前面的所有組合相加

爬到第 2 階有 2 種方法
爬到第 3 階有 3 種方法
爬到第 4 階有 5 種方法
爬到第 5 階有 8 種方法

所以現在假設 n = 5

  1. 我走 1 階 → 剩下 4 階 = 5 種
  2. 我走 2 階 → 剩下 3 階 = 3 種

5 + 3 = 8 種 (算過的我們就不再算了)

下面圖解隨便看

vocus|新世代的創作平台


DP 的關係式:

dp[i] = 爬到第 i 階的方法數

# 爬到地 i 階就是
從第 i - 1 階跨 1 階上來
從第 i - 2 階跨 2 階上來

# 簡單來來說核心就是
dp[i] = dp[i - 1] + dp[i - 2]

# 初始化
dp[1] = 1
dp[2] = 2

# 算階層
dp[1] = 1
dp[2] = 2
dp[3] = dp[2] + dp[1] = 2 + 1 = 3
dp[4] = dp[3] + dp[2] = 3 + 2 = 5
dp[5] = dp[4] + dp[3] = 5 + 3 = 8

這是我的,但我覺得我的寫法可以在優化,我沒有特別想

class Solution:
def climbStairs(self, n: int) -> int:
if n == 1: return 1
elif n == 2: return 2

dp = [0] * (n + 1)

dp[1] = 1
dp[2] = 2

for i in range(3, n + 1):
dp[i] = dp[i - 2] + dp[i - 1]
print(f"dp[{i}] = {dp[i - 2]} + {dp[i - 1]} = {dp[i]}")

return dp[n]




P.S. 方格子寫這些格式好難調整,一直壞掉有人知道是爲什麼嗎?寫起來有點不順

留言
avatar-img
Chrouos 的空間
1會員
14內容數
隨筆紀錄
Chrouos 的空間的其他內容
2026/05/04
2026/05/04
2026/04/28
DeepSeek-V4 Preview, GPT5.5 + Image,
2026/04/28
DeepSeek-V4 Preview, GPT5.5 + Image,
2026/04/22
各種新的3D模型和新的agent model (Qwen3.6-Max-Preview , kimi 2.5)
2026/04/22
各種新的3D模型和新的agent model (Qwen3.6-Max-Preview , kimi 2.5)
看更多
你可能也想看
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
Thumbnail
題目 : 35. Search Insert Position
Thumbnail
題目 : 35. Search Insert Position
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
Thumbnail
題目 : 9. Palindrome Number
Thumbnail
題目 : 9. Palindrome Number
Thumbnail
題目敘述 題目會給定我們兩個輸入字串word1, word2,要求我們依照word1,word2,word1,word2, ... 交叉前進的方式,合併兩個字串,作為輸出。 題目的原文敘述 測試範例 Example 1: Input: word1 = "abc", word2 = "pq
Thumbnail
題目敘述 題目會給定我們兩個輸入字串word1, word2,要求我們依照word1,word2,word1,word2, ... 交叉前進的方式,合併兩個字串,作為輸出。 題目的原文敘述 測試範例 Example 1: Input: word1 = "abc", word2 = "pq
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
Thumbnail
題目 : 69. Sqrt(x)
Thumbnail
題目 : 69. Sqrt(x)
Thumbnail
題目 : 28. Find the Index of the First Occurrence in a String
Thumbnail
題目 : 28. Find the Index of the First Occurrence in a String
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
Thumbnail
題目 : 100. Same Tree
Thumbnail
題目 : 100. Same Tree
Thumbnail
題目:66. Plus One
Thumbnail
題目:66. Plus One
Thumbnail
題目 : 83. Remove Duplicates from Sorted List
Thumbnail
題目 : 83. Remove Duplicates from Sorted List
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News