- 判断金额凑不出的小技巧:先初始化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]更新了值
}
}