Leetcode每日一题
题目链接: 746. 使用最小花费爬楼梯
解题思路: 每次爬楼梯有两种选择,分别为走一步和走两步,所以可以选择每次花费最小的进行操作。可以写出状态转移方程。dp[i]表示到达第I层阶梯最小的花费。下面可以写出状态转移方程。注意要对所有的位置进行判断,所以最后的遍历终点为length + 1.
d
p
[
i
]
=
m
i
n
(
d
p
[
i
−
1
]
+
c
o
s
t
[
i
−
1
]
,
d
p
[
i
−
2
]
+
c
o
s
t
[
i
−
2
]
)
;
i
:
2
→
l
e
n
g
t
h
+
1
dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]); i:2\rightarrow length+1
dp[i]=min(dp[i−1]+cost[i−1],dp[i−2]+cost[i−2]);i:2→length+1
题解:
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
# dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])
dp = [0] * (len(cost) + 1)
for i in range(2, len(cost) + 1):
dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])
return dp[-1]