diff --git a/Dynamic-Programming/CoinChange.js b/Dynamic-Programming/CoinChange.js new file mode 100644 index 000000000..c7050177b --- /dev/null +++ b/Dynamic-Programming/CoinChange.js @@ -0,0 +1,45 @@ +function change (coins, amount) { + const combinations = new Array(amount + 1).fill(0) + combinations[0] = 1 + + for (let i = 0; i < coins.length; i++) { + const coin = coins[i] + + for (let j = coin; j < amount + 1; j++) { + combinations[j] += combinations[j - coin] + } + } + return combinations[amount] +} + +function minimumCoins (coins, amount) { + // minimumCoins[i] will store the minimum coins needed for amount i + const minimumCoins = new Array(amount + 1).fill(0) + + minimumCoins[0] = 0 + + for (let i = 1; i < amount + 1; i++) { + minimumCoins[i] = Number.MAX_SAFE_INTEGER + } + for (let i = 1; i < amount + 1; i++) { + for (let j = 0; j < coins.length; j++) { + const coin = coins[j] + if (coin <= i) { + const subRes = minimumCoins[i - coin] + if (subRes !== Number.MAX_SAFE_INTEGER && subRes + 1 < minimumCoins[i]) { + minimumCoins[i] = subRes + 1 + } + } + } + } + return minimumCoins[amount] +} + +function main () { + const amount = 12 + const coins = [2, 4, 5] + console.log('Number of combinations of getting change for ' + amount + ' is: ' + change(coins, amount)) + console.log('Minimum number of coins required for amount :' + amount + ' is: ' + minimumCoins(coins, amount)) +} + +main()