1054. 最少费用的爬台阶方法

1054. 最少费用的爬台阶方法

 
在楼梯上,每一号台阶都有各自的费用,即第 i 号台阶有非负成本cost [i](台阶从0号索引)。
一旦你支付了费用,你可以爬一到两步。 你需要找到最低成本来到达最高层,你可以从索引为0的楼梯开始,也可以从索引为1的楼梯开始。

样例

样例 1:
输入: cost = [10, 15, 20]
输出: 15
解释: 最便宜的方法是从第1号台阶起步,支付费用并直接到达顶层。
样例 2:
输入: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
输出: 6
解释: 最便宜的方法是从第0号台阶起步,只走费用为1的台阶并且跳过第3号台阶。

注意事项

 

1.cost 的总长度范围在 [2, 1000]之间.
2.每一个 cost[i] 都是一个在 [0, 999]之间的整数.
 
 
public class Solution {
    /**
     * @param cost: an array
     * @return: minimum cost to reach the top of the floor
     */
    public int minCostClimbingStairs(int[] cost) {
            // Write your code here
        if (cost.length <= 1) return 0;
            int[][] sum = new int[cost.length][2];
            sum[0][0] = 0;
            sum[0][1] = 0;
            sum[1][0] = cost[1];
            sum[1][1] = Math.min(cost[0], cost[1]);
            for (int i = 2; i < cost.length; i++) {
                sum[i][0] = sum[i-1][1] + cost[i];
                sum[i][1] = Math.min(sum[i][0],sum[i-1][0]);
            }
            return sum[sum.length - 1][1];
    }  
         
}
 
 
public class Solution {
    /**
     * @param cost: an array
     * @return: minimum cost to reach the top of the floor
     */
    public int minCostClimbingStairs(int[] cost) {
            // Write your code here
          if (cost.length <= 1) return 0;
            int[] sum = new int[cost.length];
            sum[0] = 0;
            sum[1] = Math.min(cost[0], cost[1]);
            for (int i = 2; i < cost.length; i++) {
                sum[i] = Math.min(sum[i - 2]+cost[i-1], sum[i-1] + cost[i]);
            }
            return sum[sum.length - 1];
    }  
         
}
 
 
public class Solution {
    /**
     * @param cost: an array
     * @return: minimum cost to reach the top of the floor
     */
    public int minCostClimbingStairs(int[] cost) {
            // Write your code here
            return minCost(cost, cost.length);
    }
 
 
    private int minCost(int[] cost, int length) {
            if (length == 1) {
                return 0;
            } else if (length == 2) {
                return Math.min(cost[0], cost[1]);
            } else {
                return Math.min(cost[length - 1]+minCost(cost, length - 1),
                        cost[length - 2]+minCost(cost, length - 2));
            }
    }  
         
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时代我西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值