没看答案。
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
'''
basecase:dp[0] = dp[1] = 0,因为cost的长度大于等于2
state:dp[i]表示有i个台阶时的最低花费,台阶从0开始算
transfer:dp[i] = min(dp[i-2]+cost[i-2], dp[i-1]+cost[i-1])
因为向上只能爬一个或两个台阶
result:dp[-1]
'''
n = len(cost)
dp = [0] * (n+1)
for i in range(2, n+1):
dp[i] = min(dp[i-2]+cost[i-2], dp[i-1]+cost[i-1])
return dp[-1]
空间复杂度优化版:
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
'''
原理如上
因为dp[i]至于之前的两个状态有关,所以可以将dp数组替换为3个变量交替进行状态转移
'''
n = len(cost)
pre1 = pre2 = curr = 0
for i in range(2, n+1):
curr = min(pre1 + cost[i-2], pre2 + cost[i-1])
pre1 = pre2
pre2 = curr
return curr