LC 322 Coin Change(M)
public int coinChange(int[] coins, int amount) {
if(amount<1) return 0;
int[] dp = new int[amount+1]; // 记录 1 到 amount的最小组合
int sum = 0;
while(++sum<=amount) {
int min = -1; // 如果没有coin组合,维持 -1
for(int coin : coins) { //每个coin和sum比较
if(sum >= coin && dp[sum-coin]!=-1) { //只有sum大于等于coin的值 并且 sum – coin 是有coin组合的
int temp = dp[sum-coin]+1; // 当前临时组合值是
//如果 min还是初始-1. Temp 就是当前最小,否则比取temp 和 min中的最小值
min = min<0 ? temp : (temp < min ? temp : min);
}
}
dp[sum] = min; // 保留当前sum的最小coin组合
}
return dp[amount];
}Last updated