我们都知道,爬楼梯是动态规划基础题目。
随着物价上涨,爬个楼梯还要钱。
leetcode746
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
示例 1:
输入:cost = [10,15,20]
输出:15
解释:你将从下标为 1 的台阶开始。
- 支付 15 ,向上爬两个台阶,到达楼梯顶部。
总花费为 15 。
咱一看,目的地合着是到这儿
cost = [10,15,20]的情况下,事实上目的地比cost数组长度还得多一个呢
所以dp[costs.length+1]没跑了
那么dp是什么意思呢,就是到达我们第i阶的阶梯,要花多少钱
那么dp[0]和dp[1]肯定是0啦,都没走,题目说了[可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。]所以这俩都是0,都可以是起点。
那么dp[i]会等于i-1以及i-2这个地方跑上来的里面的最小值,
也就是
dp[i] = Math.min(
cost[i-1] + dp[i-1], 从减一处过来,带上减一阶的cost就是总费,下面减二同理哈
cost[i-2] + dp[i-2]
那么其实就做完了
这道题容易错的地方就是dp没选准,比如dp[0]设成了cost[0],但是哥们,这钱是你站在这儿往上走你才花儿啊,dp[0]就是你呆在那啥都不干,就是0。