LeetCode 746:使用最小花费爬楼梯 —— 题解笔记

LeetCode 746:使用最小花费爬楼梯 ------ 题解笔记

🔗 题目链接

👉 https://leetcode.cn/problems/min-cost-climbing-stairs/


📖 内容概要

给定一个数组 cost,其中 cost[i] 表示登上第 i 阶楼梯所需支付的费用。

你可以从第 0 阶或第 1 阶开始,支付该台阶的费用后继续向上

求到达顶层(楼顶)的最小花费。

✅ 动态规划

✅ 一维 DP

✅ 与「爬楼梯」「斐波那契」高度相似


💡 解题思路

一、状态定义(非常关键)

java 复制代码
dp[i] = 到达第 i 阶楼梯的最小花费

⚠️ 注意:

到达第 i 阶时,还没有支付 cost[i]


二、状态转移方程

到达第 i 阶,只能来自:

  • i-1 阶,再跨 1 步
  • i-2 阶,再跨 2 步
java 复制代码
dp[i] = min(
    dp[i-1] + cost[i-1],
    dp[i-2] + cost[i-2]
)

三、初始条件

java 复制代码
dp[0] = 0; // 起点
dp[1] = 0; // 可以从第 1 阶开始

四、最终结果

java 复制代码
return dp[n];

楼顶在第 n 阶(数组外)


✅ AC 代码(Java)

java 复制代码
class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int n = cost.length;
        int[] dp = new int[n + 1];

        dp[0] = 0;
        dp[1] = 0;

        for (int i = 2; i <= n; i++) {
            dp[i] = Math.min(
                dp[i - 1] + cost[i - 1],
                dp[i - 2] + cost[i - 2]
            );
        }
        return dp[n];
    }
}

⏱️ 复杂度分析

指标 复杂度
时间复杂度 O(n)
空间复杂度 O(n)(可优化为 O(1))

📌 三题横向对比

题目 本质 状态转移 初始条件
509. 斐波那契数(Fibonacci Number) 递推 f(i)=f(i-1)+f(i-2) f(0)=0, f(1)=1
70. 爬楼梯(Climbing Stairs) 方案数 dp[i]=dp[i-1]+dp[i-2] dp[0]=1, dp[1]=1
746. 最小花费爬楼梯 最小代价 dp[i]=min(dp[i-1]+c[i-1], dp[i-2]+c[i-2]) dp[0]=0, dp[1]=0

✅ 三者关系图

复制代码
Fibonacci  →  爬楼梯  →  最小花费爬楼梯
(基础递推)(组合计数)(带权最优解)

👉 这是 DP 学习的标准演进路线


✅ 空间优化(进阶)

java 复制代码
int prev2 = 0, prev1 = 0;
for (int i = 2; i <= cost.length; i++) {
    int curr = Math.min(prev1 + cost[i-1], prev2 + cost[i-2]);
    prev2 = prev1;
    prev1 = curr;
}
return prev1;

📌 面试一句话总结

这道题是"带权重的爬楼梯",状态转移和斐波那契几乎一样,只是从求和变成了取最小值。

相关推荐
用户298698530141 小时前
Java 操作 Word 文档:常见编辑功能实现
java·后端
pipo1 小时前
没雷达也能调 Nav2?我开源了一套仿真到实机复用的 ROS 2 3D LiDAR 导航工作空间
算法
Sunia1 小时前
《Agentx专栏》06-记忆系统:用Redis+Milvus给AI配上短期+长期双层记忆
java·架构
码不停蹄的玄黓1 小时前
线上CPU 100% 全流程排查步骤
java
天一生水water1 小时前
agent教程S01-Agent 最小循环教程整理
java·服务器·网络·agent
二哈赛车手1 小时前
新人笔记---继图片搜索功能后续以及AI网络搜索功能一些经验与踩坑点,吐槽一下自己在做这方面的崩溃瞬间
java·网络·人工智能·spring boot·笔记·spring
计算机安禾1 小时前
【算法分析与设计】第44篇:随机化复杂度类:RP、BPP与去随机化猜想
java·数据结构·数据库·算法·机器学习
未若君雅裁1 小时前
Java 线程基础:进程、线程、并发并行、创建方式与生命周期
java·开发语言
计算机安禾2 小时前
【算法分析与设计】第45篇:交互式证明系统与零知识证明
算法·区块链·零知识证明