The Coin Change Problem is a classic algorithmic problem frequently encountered in computer science.
Given a set of coin denominations and a target amount, the task is to find the minimum number of coins required to make up that amount.
pseudocode:
function coinChange(coins, amount):
// Create an array to store the minimum number of coins required for each amount from 0 to 'amount'
dp = new Array(amount + 1)
dp[0] = 0 // Base case: 0 coins are required to make amount 0
// Initialize all other values in dp array to infinity
for i from 1 to amount:
dp[i] = ∞
// Iterate through each coin
for coin in coins:
// For each coin, update dp array from the current coin value to the amount
for i from coin to amount:
// Update dp[i] if using current coin reduces the number of coins needed for amount i
dp[i] = min(dp[i], dp[i - coin] + 1)
// If dp[amount] is still infinity, it means no combination of coins can make the amount
if dp[amount] is ∞:
return -1
else:
return dp[amount]
functionminCoins(coins, amount) {// Create an array to store the minimum number of coins required for each amount from 0 to amountlet dp =newArray(amount +1).fill(Infinity);// Base case: 0 coins required to make 0 amount dp[0] =0;// Iterate through all amounts from 1 to the target amountfor (let i =1; i <= amount; i++) {// Iterate through all coin denominationsfor (let j =0; j <coins.length; j++) {// Check if the current coin denomination can be used to make up the current amountif (coins[j] <= i) {// Update the minimum number of coins required for the current amount dp[i] =Math.min(dp[i], dp[i - coins[j]] +1); } } }// If dp[amount] is still Infinity, it means the amount cannot be made up with the given coinsif (dp[amount] ===Infinity) {return-1; // Return -1 to indicate impossibility } else {return dp[amount]; // Otherwise, return the minimum number of coins required }}// Example usage:constcoins= [1,2,5];constamount=11;console.log("Minimum number of coins required:",minCoins(coins, amount)); // Output: 3 (using 5, 5, and 1 coins)
In this implementation, we use dynamic programming to build up the solution incrementally.
We initialize an array dp to store the minimum number of coins required for each amount from 0 to the target amount.
We then iterate through all amounts from 1 to the target amount, and for each amount, we iterate through all coin denominations.
If the current coin denomination can be used to make up the current amount, we update the dp array with the minimum number of coins required.
Finally, we return dp[amount] as the result. If dp[amount] is still Infinity, it means the amount cannot be made up with the given coins, so we return -1 to indicate impossibility.