322. 零钱兑换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 判断金额凑不出的小技巧:先初始化DP table各个元素为amount +1(代表不可能存在的情况),在遍历时如果金额凑不出则不更新,于是若最后结果仍然是amount + 1,则表示金额凑不出
class Solution {
    public int coinChange(int[] coins, int amount) {
        int[] dp=new int[amount+1];
        //为什么要给dp都附上一个初始值,
        int max = amount + 1;
        Arrays.fill(dp, max);
        dp[0]=0;
        for(int i=1;i<=amount;i++){
            for(int j=0;j<coins.length;j++){
                if(i>=coins[j]){//这个判断是必须的。否则(dp[-3]会报错)
                    dp[i]=Math.min(dp[i],dp[i-coins[j]]+1);
                    //如果不把dp[amount]的值都设一个大的数,那么min的值肯定都是0,最后返回的也是0了
                }
            }
        }
        return dp[amount]>amount?-1:dp[amount];
        //(不要直接写==amount-1,因为有全是1组成的情况)
        //因为刚开始给dp[amount]设置的值就是amount+1,这一句就是为了判断是不是dp[amount]更新了值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值