7月26日:零钱兑换

题目如下:

题目要求凑成总金额所需的最少的银币个数。当看到硬币个数最少时,我的大脑立马出现了条件反射。这不是要用动态规划来解题嘛(机智如我)。可是想了一会儿还是想不到状态转移方程。

只好默默的打开题解,感觉题解的思路总是那么晦涩难懂,看着看着我就没了耐心,于是我开始看代码,通过看代码我感觉比看题解思路要容易理解,毕竟题解思路是别人的想法,想将别人的想法理解为自己的东西还是不太容易的,但是代码却是实实在在的东西。然后看代码看懂了就立马开始自己写一遍。一开始写完感觉差不多了,可是运行完成后答案总是0,搞不懂为什么,然后又重新和题解的代码进行对比,发现完全一样,只是变量名不一样。正当我很郁闷的时候突然手一抖,leetcode窗口就自己关闭了,再当我打开时候刚刚写的代码没有了,所以只好重新写一遍了,第二遍写完时提交通过了,真是一件很神奇的事儿。

下面是我的代码:

class Solution {

    public int coinChange(int[] coins, int amount) {

       if(coins.length==0)return -1;

//定义状态数组,存放的是当前金额对应的最小硬币数量

       int[] dp = new int[amount+1];

       for(int i=1;i<=amount;i++){

           int min = Integer.MAX_VALUE;

           for(int j=0;j<coins.length;j++){

               if(i-coins[j]>=0&&dp[i-coins[j]]<min)

                    min = dp[i-coins[j]]+1;

           }

           dp[i] = min;

       }

       return dp[amount]==Integer.MAX_VALUE?-1:dp[amount];

    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值