Please write the algorithm in Java comments on code will be
Please write the algorithm in Java. comments on code will be helpful
Solution
// CoinChange.java
public class CoinChange
{
public static int count(int[] coins, int inputAmount)
{
if(inputAmount==0) return 0;
// minNumCoins[] is minimum number of coins required to get the inputAmount
int[] minNumCoins = new int [inputAmount+1];
minNumCoins[0]=0; // no need of any coin to get 0
for(int i=1;i<=inputAmount; i++)
// initially set minNumCoins[i] to be MAX_VALUE.
minNumCoins[i]= Integer.MAX_VALUE;
for(int i=0; i<=inputAmount; i++)
{
for(int c: coins)
{
if(i+c <=inputAmount)
{
if(minNumCoins[i]==Integer.MAX_VALUE)
{
// minNumCoins[i+coin] = minNumCoins[i+coin] is minNumCoins[i] is not reachable.
minNumCoins[i+c] = minNumCoins[i+c];
}
else
{
// minNumCoins[i+coin] = min(minNumCoins[i+coin], minNumCoins[i]+1) if minNumCoins[i] is reachable
minNumCoins[i+c] = Math.min(minNumCoins[i+c], minNumCoins[i]+1);
}
}
}
}
if(minNumCoins[inputAmount] >= Integer.MAX_VALUE)
return -1;
return minNumCoins[inputAmount];
}
// driver main function
public static void main(String[] args)
{
int coins[]=new int[4];//declaration and instantiation
coins[0]=1;//initialization
coins[1]=5;
coins[2]=10;
coins[3]=25;
System.out.println(\"Total: \"+ count(coins,78) + \" coins\");
}
}
/*
since there are two nested for loops involved which iterates over the coins array
Time complexity: O(n^2)
output:
Total: 6 coins
*/

