746. Min Cost Climbing Stairs
題目網址:https://leetcode.cn/problems/min-cost-climbing-stairs/
題意:給一整數 array
cost
, 其中cost[i]
代表從第i
皆樓梯往上爬所需支付的費用。一旦支付該費用, 可以選擇往上爬一個 or 二個台階。可以選擇從 index 為
0
or1
的位置開始往上爬。請計算到達樓梯頂部
index = cost.size()
所需的最小費用。
Solution 1:
想法:利用 DP, 定義
dp[i]
為抵達index = i
所需的最小費用, 因此dp[i]
為抵達前一階的最小費用 + 該階的費用
、抵達前兩階的最小費用 + 該階的費用
中取較小者
dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])
class Solution { |
- time:$O(n)$ ➔ for loop
- space:$O(n)$ ➔
dp
Solution 2:
想法:改進 Solution 1, 因為發現計算
dp[i]
只需用到dp[i - 1]
、dp[i - 2]
即可, 也就是說只需紀錄dp[i - 1]
和dp[i - 2]
就好, 根本不需要開到n
個空間
class Solution { |
- time:$O(n)$ ➔ for loop
- space:$O(1)$ ➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論