力扣746.使用最小花费爬楼梯

题目

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费

解题思路

​ 动态规划

1.首先需要明确,先支付当前台阶的费用后挑层

2.到达第i级台阶的阶梯顶部的最小花费,有两个选择:

最后踏上了第i级台阶,最小花费dp[i],再迈一步到达第i级台阶楼层顶部;
最后踏上了第i-1级台阶,最小花费dp[i-1],再迈两步跨过第i级台阶直接到达第i级台阶的阶梯顶部。
所以到达第i级台阶的阶梯顶部的最小花费为minCost[i] = min(dp[i], dp[i-1])。

即为了求出到达第i级台阶的阶梯顶部的最小花费,我们先算出踏上第i级台阶的最小花费,用dp[i]表示,再通过min(dp[i], dp[i-1])来求出到达第i级台阶的阶梯顶部的最小花费。

代码

java解法,点击查看
class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int payMin=0;
        if(cost.length==2){
            return cost[0]<cost[1] ? cost[0]:cost[1];
        }
        int length=cost.length;
        int[] conPay=new int[cost.length];
        conPay[0]=cost[0];
        conPay[1]=cost[1];
        for(int i=2;i<length;i++){
            conPay[i]=Math.min(conPay[i-1],conPay[i-2])+cost[i];
        }
        return Math.min(conPay[length-1],conPay[length-2]);
    }
}
posted @ 2024-05-02 12:25  吴不邪  阅读(3)  评论(0编辑  收藏  举报