1、题目描述
2、题目解析
本题使用动态规划来解决比较简便,难点在于找到对应的递推公式。
根据题意分析,假设数组 cost 的长度为 n,则 n 个阶梯分别对应下标 0 到 n-1,楼层顶部对应下标 n,问题等价于计算达到下标 n 的最小花费。
- 创建长度为 n+1 的数组 dp,其中 dp[i] 表示达到下标 i 的最小花费。
- 由于可以选择下标 0 或 1 作为初始阶梯,因此有 dp[0]=dp[1]=0。
-
当 2≤i≤n 时,可以从下标 i−1 使用 cost[i−1] 的花费达到下标 i,或者从下标 i−2 使用 cost[i−2] 的花费达到下标 i。为了使总花费最小,dp[i] 应取上述两项最小值,因此状态转移方程如下:
dp[i]=min(dp[i−1]+cost[i−1],dp[i−2]+cost[i−2])依次计算 dp 中的每一项的值,最终得到的 dp[n] 即为达到楼层顶部的最小花费。
因此根据上面的分析,实现代码如下:
class Solution {
public int minCostClimbingStairs(int[] cost) {
int n = co