mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 15:45:40 +08:00
Update 0746.使用最小花费爬楼梯.md
This commit is contained in:
@ -245,26 +245,42 @@ class Solution {
|
||||
```
|
||||
|
||||
### Python
|
||||
|
||||
动态规划(版本一)
|
||||
```python
|
||||
# 第一步不支付费用
|
||||
class Solution:
|
||||
def minCostClimbingStairs(self, cost: List[int]) -> int:
|
||||
n = len(cost)
|
||||
dp = [0]*(n+1) # 到达前两步费用为0
|
||||
for i in range(2, n+1):
|
||||
dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])
|
||||
return dp[-1]
|
||||
```
|
||||
```python
|
||||
# 第一步支付费用
|
||||
|
||||
class Solution:
|
||||
def minCostClimbingStairs(self, cost: List[int]) -> int:
|
||||
dp = [0] * (len(cost) + 1)
|
||||
dp[0] = 0
|
||||
dp[1] = 0
|
||||
dp[0] = 0 # 初始值,表示从起点开始不需要花费体力
|
||||
dp[1] = 0 # 初始值,表示经过第一步不需要花费体力
|
||||
|
||||
for i in range(2, len(cost) + 1):
|
||||
# 在第i步,可以选择从前一步(i-1)花费体力到达当前步,或者从前两步(i-2)花费体力到达当前步
|
||||
# 选择其中花费体力较小的路径,加上当前步的花费,更新dp数组
|
||||
dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])
|
||||
return dp[len(cost)]
|
||||
|
||||
return dp[len(cost)] # 返回到达楼顶的最小花费
|
||||
|
||||
```
|
||||
动态规划(版本二)
|
||||
|
||||
```python
|
||||
class Solution:
|
||||
def minCostClimbingStairs(self, cost: List[int]) -> int:
|
||||
dp0 = 0 # 初始值,表示从起点开始不需要花费体力
|
||||
dp1 = 0 # 初始值,表示经过第一步不需要花费体力
|
||||
|
||||
for i in range(2, len(cost) + 1):
|
||||
# 在第i步,可以选择从前一步(i-1)花费体力到达当前步,或者从前两步(i-2)花费体力到达当前步
|
||||
# 选择其中花费体力较小的路径,加上当前步的花费,得到当前步的最小花费
|
||||
dpi = min(dp1 + cost[i - 1], dp0 + cost[i - 2])
|
||||
|
||||
dp0 = dp1 # 更新dp0为前一步的值,即上一次循环中的dp1
|
||||
dp1 = dpi # 更新dp1为当前步的最小花费
|
||||
|
||||
return dp1 # 返回到达楼顶的最小花费
|
||||
|
||||
```
|
||||
|
||||
### Go
|
||||
|
Reference in New Issue
Block a user