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;

📌 面试一句话总结

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

相关推荐
未秃头的程序猿3 小时前
Java 26正式发布!这3个新特性,让代码量直接减半
java·后端·面试
用户298698530144 小时前
Word 文档文本查找与替换的 Java 实现方案
java·后端
阿哉4 小时前
Nacos 服务发现源码:藏在背后的两套事件机制,90%的人只讲了一半
java
05Kevin4 小时前
lk每日冒险题--数据结构6.27
算法
咖啡八杯4 小时前
GoF设计模式——命令模式
java·设计模式·架构
AI人工智能_电脑小能手4 小时前
【大白话说Java面试题 第125题】【并发篇】第25题:说说 Java 线程的中断机制
java·后端·面试
Java内核笔记4 小时前
Spring Security 源码解析(六)无状态 JWT 实践:Session 共享与自定义过滤器
java·后端
荣码4 小时前
LangGraph多Agent协作:3个Agent干活比1个强,但我踩了4个坑
java·python
唐青枫6 小时前
Java 虚拟线程实战指南:从 Thread API 到 Spring Boot 高并发应用
java