题目描述
题目理解
到达楼梯不用钱,选择以该阶楼梯为起点要给相应的钱
实现思路--动态规划
定义个一维数组pay,表示从起点到对应下标要给的钱(到达不给钱,以到达的点起步才给钱)
以为可以从下标0或者1开始出发,所以pay[0],pay[1]置为0。
遍历cost数组,由于起点可以选择下标0或者下标1开始,所以从i=2开始。以如下输入为例
遍历到2,选择起点,若起点为0,则给钱为0+1,若起点为1,则给钱0+100,比较得出,pay[2]赋值为1
遍历到3,选择有两个,选择cost[1]为起点到cost[3],则花费0+100,或者在上一步的基础上到cost[2]再到cost[3],花费1+1,通过比较,选择第二个选择,pay[3]赋值为2,
遍历到4,选择有两个,cost[2]到cost[4],花费pay[2]+cost[2],花费2,cost[3]到cost[4],花费pay[3]+cost[4],花费3,通过比较,pay[4]赋值为2
通过不断的遍历,找出到每一个台阶的最优方案,最后把到达最后一个台阶的花费返回即可
代码实现
class Solution {
public int minCostClimbingStairs(int[] cost) {
int len = cost.length;
int[] pay = new int[len+1];
pay[0] = pay[1] = 0;
for (int i = 2; i <= len; i++) {
pay[i] = Math.min(pay[i-1]+cost[i-1], pay[i-2]+cost[i-2]);
}
return pay[len];
}
}