文章目录
力扣算法学习day27-1
746-使用最小花费爬楼梯
题目
代码实现
class Solution {
public int minCostClimbingStairs(int[] cost) {
// if(cost.length == 2){// 我看了哈,实际上可以去掉。
// return Math.min(cost[0],cost[1]);
// }
// dp 速度 0ms
// 1.创建dp数组。 注意:实例1可以看出楼梯顶层实际上是cost.length坐标位置。
int[] dp = new int[cost.length+1];
// 2.确定迭代公式
// 类似爬楼梯,举例:比如第3阶,由于每次台阶依然只能跳跃1,2阶,故三阶台阶依然是2阶台阶跳一步
// 1阶台阶跳2步能到,所以,到第三节需要从前面两种中去取,故选用dp,取前两阶到当前台阶花费更
// 小的即为当前台阶最小的花费,同理,针对多阶台阶,当前台阶的依次由前两阶最小花费决定即可。
// 迭代公式:i > 1 ,dp[i] = (dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])取最小,dp[i]为到达台阶i的最小花费。
// 3.初始化dp数组,这里,需要初始化0,1即前两层,因为前两层是直接选择得到的,第三层开始才是公式中的选择最小。
// dp[0] = 0;
// dp[1] = 0;// 由于初始化默认为0,所以可以省略。
// 4.确定遍历顺序
for(int i = 2;i < dp.length;i++){
dp[i] = Math.min(dp[i-1] + cost[i-1],dp[i-2] + cost[i-2]);
}
// 5.通过实例,验证答案和dp数组变化是否符合预期
// for(int i = 0;i < dp.length;i++){
// System.out.print(dp[i]);
// }
return dp[cost.length];
}
}