LeetCode-746-使用最小花费爬楼梯-动态规划

题目描述:

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

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

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

题目链接:LeetCode-746-使用最小花费爬楼梯

解题思路:注释中有详解。
代码实现:

java 复制代码
class Solution {
    public int minCostClimbingStairs(int[] cost) {
        // 1. 确定 dp[i] 的含义: dp[i]表示爬到第 i 个位置的最小花费
        // 2. 递推公式:dp[i]=Math.min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])
        //            dp[i-1]:再加上向上跳 1步的花费 cost[i-1]
        //            dp[i-2]:再加向上上跳 2步的花费 cost[i-2]
        // 3. 如何初始化:dp[0]=0; dp[1]=0,因为不需要花费体力,开始爬才会产生花费
        // 4. 遍历的方向:从前向后遍历
        if (cost.length==2){
            return Math.min(cost[0], cost[1]);
        }

        int[] dp = new int[cost.length+1];
        dp[0]=0;
        dp[1]=0;
        for (int i = 2; i < dp.length ; i++) {
            dp[i]=Math.min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]);
        }
        return dp[dp.length-1];
    }
}
相关推荐
阿巴~阿巴~10 分钟前
C_数据结构(队列) —— 队列的初始化、入队列队尾、队列判空、出队列队头、取队头队尾数据、队列有效元素个数、销毁队列
c语言·网络·数据结构·算法·排序算法
Lenyiin14 分钟前
2848、与车相交的点
c++·算法·leetcode·1024程序员节
mljy.15 分钟前
优选算法《前缀和》
c++·算法
小林熬夜学编程1 小时前
【MySQL】第一弹---MySQL 在 Centos 7环境安装
linux·开发语言·数据库·mysql·算法
魂兮-龙游2 小时前
C语言:将四个八位无符号数据拼接成32位的float数据
c语言·开发语言·算法·数据分析
self-discipline3622 小时前
2025.2.5总结
数据结构·算法
银河梦想家3 小时前
【Day31 LeetCode】动态规划DP Ⅳ
算法·leetcode·动态规划
go54631584653 小时前
复现论文“去模糊算法”
算法
a_j585 小时前
算法与数据结构(合并K个升序链表)
数据结构·算法·链表
进击的_鹏5 小时前
string类OJ练习题
开发语言·c++·算法