746.使用最小花费爬楼梯
题目
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
动态规划求解
- 确定 dp[] 和下标含义: 第i阶需要花费的总费用
- 确定递推公式: dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])
- 确定 dp[] 如何初始化: dp[0]=0、dp[1]=0,第 0、1 阶均花费为 0,因为 "一旦你支付此费用,即可选择向上爬一个或者两个台阶。",但在第 0、1 阶时还未支付
- 确定遍历顺序: 已知 dp[0]、dp[1] 求 dp[i],故为顺序遍历
- 举例推导 db[]:
go
func minCostClimbingStairs(cost []int) int {
min := func(i1, i2 int) int {
if i1 < i2 {
return i1
}
return i2
}
dp := make([]int, len(cost)+1)
dp[0], dp[1] = 0, 0
for i := 2; i <= len(cost); i++ {
dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])
}
return dp[len(cost)]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17