mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-04 07:29:47 +08:00
Added CoinChange Algorithm (#260)
* Added CoinChange Algorithm * Minor Changes * Minor Changes * Minor Changes
This commit is contained in:
45
Dynamic-Programming/CoinChange.js
Normal file
45
Dynamic-Programming/CoinChange.js
Normal file
@ -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()
|
Reference in New Issue
Block a user