文章目录
- 题目介绍
- 题解
题目介绍
题解
思路分析:
- 确定dp数组以及下标的含义:dp[i]的定义为到达第i台阶所花费的最少体力。
- 确定递推公式:可以有两个途径得到dp[i],一个是dp[i-1] 一个是dp[i-2]。dp[i - 1] 跳到 dp[i] 需要花费 dp[i - 1] + cost[i - 1]。dp[i - 2] 跳到 dp[i] 需要花费 dp[i - 2] + cost[i - 2]。所以dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])。
- dp数组初始化:dp[0] = 0,dp[1] = 0。
- 确定遍历顺序:从递推公式dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])中可以看出,遍历顺序一定是从前向后遍历的。
- 举例推导dp数组。
代码如下:
//cost.length是大于等于2的
class Solution {
public int minCostClimbingStairs(int[] cost) {
int len = cost.length;
int[] dp = new int[len + 1];
// 从下标为 0 或下标为 1 的台阶开始,因此支付费用为0
dp[0] = 0;
dp[1] = 0;
// 计算到达“每一层”台阶的最小费用
for (int i = 2; i <= len; i++) {
dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
}
return dp[len];
}
}