Leet322. 零錢兌換(Coin Change)
阿新 • • 發佈:2018-12-14
public static int coinChange(int[] coins, int amount) { //dp[amount]=min(dp[amount-coins[i]])+1 if(amount==0) { return 0; } int dp[]=new int[amount+1]; Arrays.fill(dp, Integer.MAX_VALUE-1); dp[0]=0; for(int i=1;i<=amount;i++) { for(int j=0;j<coins.length;j++) { if(i>=coins[j]) { dp[i]=Math.min(dp[i-coins[j]]+1, dp[i]);//用當前硬幣 不用當前硬幣 //System.out.println("dp"+i+"="+dp[i]); } } } if(dp[amount]==Integer.MAX_VALUE-1)//無法完成 { return -1; } else { return dp[amount]; } }
填充Integer.MAX_VALUE-1的目的是防止溢位
如輸入coins為[2] amount為3時
dp[0]為0
dp[1]為Integer.MAX_VALUE-1
dp[2]時min中為Integer.MAX_VALUE與Integer.MAX_VALUE-1的對比 可以取得正確值
而填充時不-1就會出現錯誤