【LeetCode】爬楼梯的最少成本 Java 题解
题目描述
数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。
每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。
请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。
复制代码
思路分析
今天的算法题目是数组相关的题目,题目要求求出爬楼梯的最小成本。爬楼梯这个题目很熟悉,每次可以向上爬一个阶梯或者爬两个阶梯。这个题目有多种解法,我们采用动态规划求解。
数组 cost 的长度是 n, 下标是 0 ~ n - 1, 我们首先创建一个长度为 n + 1 的 dp 数组,由于你可以选择从下标为 0 或 1 的元素作为初始阶梯。因此 dp[0] = dp[1] = 0, 求最小花费,递推公式为 dp[i] = Math.min(dp[i-1] + cost[i - 1] , dp[i-2] + cost[i - 2]); 实现代码如下,供参考。
通过代码
复制代码
总结
上述算法的时间复杂度是 O(n), 空间复杂度是 O(n)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/7d3bf19cbecb9b163aa1fe27d】。文章转载请联系作者。
评论