746-min-cost-climbing-stairs¶
Try it on leetcode
Description¶
Solution(Python)¶
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
return self.optimal(cost)
# Time Complexity: O(n)
# Space Complexity: O(n)
def topdown(self, cost: List[int]) -> int:
n = len(cost)
@cache
def dfs(i):
if i >= n:
return 0
if i == -1:
return min(dfs(i + 1), dfs(i + 2))
return cost[i] + min(dfs(i + 1), dfs(i + 2))
return dfs(-1)
# Time Complexity: O(n)
# Space Complexity: O(n)
def bottomup(self, cost: List[int]) -> int:
n = len(cost)
dp = [0] * (n)
dp[n - 1] = cost[n - 1]
dp[n - 2] = min(cost[n - 2] + dp[n - 1], cost[n - 2])
for i in range(n - 3, -1, -1):
dp[i] = cost[i] + min(dp[i + 1], dp[i + 2])
return min(dp[0], dp[1])
# Time Complexity: O(n)
# Space Complexity: O(1)
def optimal(self, cost: List[int]) -> int:
n = len(cost)
prev2 = cost[n - 1]
prev1 = min(cost[n - 2] + prev2, cost[n - 2])
for i in range(n - 3, -1, -1):
cur = cost[i] + min(prev1, prev2)
prev2 = prev1
prev1 = cur
return min(prev1, prev2)