最小代价爬楼梯

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35508033/article/details/88900513

你需要爬上一个N层的楼梯,在爬楼梯过程中, 每阶楼梯需花费非负代价,第i阶楼梯花费代价表示为cost[i], 一旦你付出了代价,你可以在该阶基础上往上爬一阶或两阶。

你可以从第 0 阶或者 第 1 阶开始,请找到到达顶层的最小的代价是多少。

首先可以看出这是一个动态规划题。那么我们就要找它的动态规划方程,
cost数组存储爬上当前楼梯所需要的体力,我们使用一个arr数组存储从开始爬到当前楼梯所需要的最小体力。长度为cost.length+1(因为咱们要得到的是爬上楼梯顶)。即arr[cost.length]。对于arr[0],爬上该楼梯的最小体力就是它本身cost[0],对于arr[1]就是cost[1]。对于arr[i]:就是arr[i-2]和arr[i-1]的较小者与cost[i]的和。
所以动态规划方程为:arr[i] = Math.min(arr[i-2],arr[i-1])+curr

public int minCostClimbingStairs(int[] cost) {
    int len = cost.length;
    if(len==2) {
        return Math.min(cost[0], cost[1]);
    }
    int [] arr = new int[len+1];
    arr[0] = cost[0];
    arr[1] = cost[1];
    for(int i=2;i <= len;i++){
        int curr = 0;
        if (i != len) {
            curr = cost[i];
        }
        arr[i] = Math.min(arr[i-2],arr[i-1])+curr;
    }
    return arr[len];
}

猜你喜欢

转载自blog.csdn.net/qq_35508033/article/details/88900513