动态规划实战:LeetCode 746爬楼梯最小花费解析

发布时间:2026/11/3 15:34:46

动态规划实战:LeetCode 746爬楼梯最小花费解析 1. 问题背景与核心理解这道LeetCode 746题看似简单实则蕴含了动态规划的经典思想。题目描述为数组cost表示爬上第i个台阶需要花费的体力值每次可以爬1或2个台阶可以从下标0或1开始求达到楼层顶部的最小花费。在实际编码面试中这类动态规划基础题出现频率极高。我遇到过不少候选人虽然能写出解法但对状态转移方程的推导过程含糊其辞。今天我们就从实际问题出发拆解这道题的思考全过程。2. 动态规划解法详解2.1 状态定义与初始化首先明确dp数组的含义。这里dp[i]表示到达第i个台阶所花费的最小体力。注意题目说达到楼层顶部所以需要虚构一个顶层即cost数组长度n对应的位置。初始化时需要考虑起始条件可以从0或1开始所以dp[0] cost[0], dp[1] cost[1]也可以选择从地面开始此时dp[0] 0, dp[1] 0两种初始化方式都可行# 方式一从台阶0或1开始 dp [0] * len(cost) dp[0], dp[1] cost[0], cost[1] # 方式二从地面开始 dp [0] * (len(cost)1) dp[0], dp[1] 0, 02.2 状态转移方程推导关键点在于理解状态转移的逻辑。到达第i个台阶有两种方式从i-1台阶跨1步上来花费dp[i-1] cost[i]从i-2台阶跨2步上来花费dp[i-2] cost[i]我们需要取这两种情况的最小值dp[i] min(dp[i-1], dp[i-2]) cost[i] # 方式一 # 或者 dp[i] min(dp[i-1]cost[i-1], dp[i-2]cost[i-2]) # 方式二2.3 完整代码实现以方式一为例的Python实现def minCostClimbingStairs(cost): n len(cost) dp [0] * n dp[0], dp[1] cost[0], cost[1] for i in range(2, n): dp[i] min(dp[i-1], dp[i-2]) cost[i] return min(dp[-1], dp[-2])注意最后返回需要比较最后两个台阶的值因为可以从倒数第二个台阶直接跨两步到顶。3. 空间优化技巧3.1 滚动数组优化观察状态转移方程发现dp[i]只依赖于前两个状态因此可以用两个变量代替整个数组def minCostClimbingStairs(cost): n len(cost) prev, curr cost[0], cost[1] for i in range(2, n): prev, curr curr, min(prev, curr) cost[i] return min(prev, curr)3.2 复杂度分析时间复杂度O(n)只需遍历一次cost数组空间复杂度优化后O(1)原始解法O(n)4. 边界条件与测试用例4.1 特殊输入处理空数组题目保证cost.length 2可不处理只有两个台阶直接返回min(cost[0], cost[1])三个台阶测试中间状态是否正确4.2 典型测试用例tests [ ([10,15,20], 15), # 最优路径15-20 ([1,100,1,1,1,100,1,1,100,1], 6), # 复杂路径 ([0,0,0,0], 0), # 全零情况 ([1,2], 1) # 最小长度 ]5. 常见错误与调试技巧5.1 易错点分析顶层处理不当忘记最后需要比较最后两个台阶初始化错误dp[1]直接赋值为cost[1]而忽略可以从0跨两步索引越界没有检查cost长度就直接访问dp[1]状态转移混淆把min(dp[i-1], dp[i-2])写成max5.2 调试建议打印dp数组观察每个步骤的状态变化画状态转移图用简单例子手动推导边界测试特别关注n2和n3的情况6. 算法扩展与变种6.1 变种题目每次可以爬1/2/3个台阶不能连续跳相同步数如不能连续两次跳两步带障碍物的爬楼梯类似LeetCode 636.2 实际应用场景游戏角色体力值计算资源分配最优路径投资组合的最小成本选择7. 个人实现心得在最初实现时我曾陷入一个思维误区认为必须从某个特定台阶开始。实际上题目允许从0或1开始这个理解偏差导致我最初的转移方程出错。后来通过画状态机图才恍然大悟。另一个经验是对于动态规划问题先写出暴力递归解法再优化往往比直接想状态转移更不容易出错。比如这道题可以先用递归思路def dfs(i): if i n: return 0 return cost[i] min(dfs(i1), dfs(i2))然后再通过记忆化优化为DP这种思考路径更加自然可靠。
延伸阅读

更多相关文章

2026/11/3 15:34:46

逆地理编码技术解析与应用实践

1. 项目概述 坐标见初心,数据守国土——这个项目名称本身就蕴含着深刻的技术使命。作为一名长期从事地理信息领域的技术从业者,我深知逆地理编码服务在现代数字化社会中的核心价值。geocode.com.cn 提供的专业逆地理编码服务,本质上是在架设一…

2026/11/3 15:29:45

配电网重构中的源网荷协同优化技术实践

1. 项目背景与核心价值在能源转型的大背景下,配电网正面临着高比例清洁能源接入带来的全新挑战。我最近完成了一个基于IEEE33节点的配电网重构项目,重点解决了可再生能源波动性与需求侧响应协同优化的问题。这个项目对于当前构建新型电力系统具有直接参考…

2026/11/3 15:29:45

华为OD机考:二维伞面雨滴模拟算法实现与优化

1. 项目背景与问题定义 最近在准备华为OD机考时遇到一道很有意思的题目——"二维伞的雨滴效应"。这道题出现在C卷双机位考试中,要求用Java实现一个模拟雨滴落在伞面上的算法。作为经历过三次华为机考的老兵,我发现这类题目往往考察的是对二维数…

2026/11/3 16:35:31

愤怒模式测试:极端压力下的系统容错实践

1. 项目概述:压力测试的暴力美学在软件工程领域有个残酷的真相——80%的系统崩溃都发生在用户情绪最激动的时刻。去年我们团队就经历过一次惨痛教训:某金融App在促销活动期间因为支付延迟问题,导致海量用户同时重试操作,最终引发数…

2026/11/3 16:35:31

国产AI算力芯片选型指南:推理与边端部署的关键指标与实践

最近这一年,我身边越来越多做AI部署的同事和朋友,开始把选型预算从云端GPU挪向国产AI算力芯片。核心原因就一句话:模型越来越能落地,但推理成本压不住了。训练是少数玩家的游戏,推理和边端才是大多数工程团队每天都要面…

2026/11/3 16:35:31

物流仓储数字孪生:实现毫米级精准映射的技术实践

1. 项目背景与核心价值 去年参与某大型物流园区数字化改造时,我们遇到一个典型痛点:管理人员虽然能通过WMS系统看到库存数据,但实际走进仓库却经常发现系统显示"有货"的货架空空如也。这种"数据透明"与"物理现实&qu…

2026/11/3 16:35:31

帝国CMS图片上传尺寸自动适配技术方案

1. 问题背景与解决方案概述在帝国CMS后台编辑器中上传图片时,系统会自动读取并填充图片的原始宽度和高度。这看似方便的功能,在实际运营中却常常带来意想不到的布局问题。当图片尺寸过大时,如果没有CSS强制约束,图片会撑破容器导致…

2026/11/3 16:35:31

每日arXiv论文分析报告:从订阅到精读的高效筛选工作流

1. 信息过载是常态:一份每日分析报告到底想解决什么问题早上七点半,咖啡还没喝完,我先打开 arXiv 的今日列表,用五分钟把标题过一遍,再花二十分钟决定哪几篇值得精读、哪几篇丢进收藏夹吃灰、哪几篇直接划走。这个动作…

2026/11/3 16:30:21

仓储数字孪生技术:三维可视化与实时监控实践

1. 项目概述 在仓储物流行业摸爬滚打十几年,我见过太多仓库管理者面对堆积如山的货物时那种手足无措的表情。传统仓储管理最大的痛点是什么?就是"看不见"——你看不见货架深处的库存状况,看不见叉车在巷道里的实时位置,…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32实战:基于MAX14431数字隔离器的SPI隔离通信方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

工业SPI隔离通信设计:MAX14431BAEE+与STM32L4A6RG实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32+NRF24L01无线抢答器:硬件设计、通信协议与低功耗实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑