题目:
题解:动态规划
创建长度为n+1的数组dp,其中dp[i]表示到达下标i的最小花费,由于可以选择从下标0或1开始,所以dp[0]=dp[1]=0;
当 2 <= i <= n 时,dp[i] 可以选择从下标 i-1 花费cost[i-1] 到达,或者从下标 i-2 花费 cost[i-2] 到达,为了使花费最小,应该取以上最小值,所以dp方程为:
dp[n] = min(dp[n-1] + cost[n-1], dp[n-2] + cost[n-])
public int minCostClimbingStairs(int[] cost) {
int length = cost.length;
int[] dp = new int[length + 1];
dp[0] = 0;
dp[1] = 0;
for (int i = 2; i <= length; i++) {
dp[i] = Math.min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]);
}
return dp[length];
}
时间复杂度:O(n)