LeetCode刷题日记day5-[746] 使用最小花费爬楼梯-->(动态规划)

题目描述

 题目理解

到达楼梯不用钱,选择以该阶楼梯为起点要给相应的钱

实现思路--动态规划

定义个一维数组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];
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值