题目描述:
LeetCode 746. Min Cost Climbing Stairs
On a staircase, the i-th step has some non-negative cost cost[i] assigned (0 indexed).
Once you pay the cost, you can either climb one or two steps. You need to find minimum cost to reach the top of the floor, and you can either start from the step with index 0, or the step with index 1.
Example 1:
Input: cost = [10, 15, 20] Output: 15 Explanation: Cheapest is start on cost[1], pay that cost and go to the top.
Example 2:
Input: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1] Output: 6 Explanation: Cheapest is start on cost[0], and only step on 1s, skipping cost[3].
Note:
costwill have a length in the range[2, 1000].- Every
cost[i]will be an integer in the range[0, 999].
题目大意:
有n级台阶,每次可以向上跳1至2级,上台阶的总花费为sum(cost[i]), i为所有踩过的台阶。
求最小花费。
解题思路:
动态规划(Dynamic Programming)
dp[x] = min(dp[x - 1], dp[x - 2]) + cost[x]
Python代码:
class Solution(object):
def minCostClimbingStairs(self, cost):
"""
:type cost: List[int]
:rtype: int
"""
size = len(cost)
dp = [cost[0], cost[1]]
for x in range(2, size):
dp.append(min(dp[x - 1], dp[x - 2]) + cost[x])
return min(dp[-1], dp[-2])
本文链接:https://bookshadow.com/weblog/2017/12/17/leetcode-min-cost-climbing-stairs/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。
如果这篇博客对你有帮助,请支持书影博客
你的捐赠将用于服务器与域名费用,帮助免费技术内容持续更新。
支付宝
微信
建议金额:¥5 / ¥10 / ¥20 / ¥50(扫码后自行输入)