题目
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
Code
采用动态规划的方式
首先确定动态规划推到公式:dp[i]表示到达第i个台阶需要花费的最少体力dp[i]
dp[i]有dp[i-1]和dp[i-2]两部分构成:
- dp[i-1]跳到dp[i]的花费为dp[i-1]+cost[i-1]
- dp[i-2]跳到dp[i]的花费为dp[i-2]+cost[i-2]
算最低花费则:min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])
选择从下标为 0 或下标为 1 的台阶开始爬楼梯,说明dp[0]=dp[1]=0不花费任何体力。
class Solution {
public int minCostClimbingStairs(int[] cost) {
int len = cost.length;
int dp[] = new int[len+1];
dp[0] = 0;
dp[1] = 0;
for(int i=2;i<=len;i++){
dp[i] = Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
}
return dp[len];
}
}