static int[] foundCoins = new int[10];
public static void Main()
Console.WriteLine("=> amount: 11 | coins: 1, 2, 5");
Console.WriteLine("...Number of coins= " + CoinChange11(11,new int[]{1,2,5}));
Console.WriteLine("\n=> amount: 3 | coins: 5, 9");
Console.WriteLine("...Number of coins= " + CoinChange11(3,new int[]{5,9}));
Console.WriteLine("\n=> amount: 12 | coins: 1, 5, 6, 9");
Console.WriteLine("...Number of coins= " + CoinChange11(12,new int[]{1,5,6,9}));
public static int CoinChange(int x, int[] coins)
foreach (int coin in coins)
Console.WriteLine("x: " +x+ " | coin:" + coin);
int val = CoinChange(x- coin, coins);
Console.WriteLine(">>> min: " +min+ " | val+1:" + newVal);
public static int CoinChange11(int x, int[] coins)
if (x == 0) return counter;
for(int i=coins.Length-1; i>=0; i--)
Console.WriteLine("x: " +x+ " | coin:" + coins[i]);
return CoinChange11(x-coins[i], coins);
Console.WriteLine("returning -1");
public static int CoinChange2(int amount, int[] coins)
int[,] arr = new int[coins.Length, amount+1];
for (int i=0; i<coins.Length; i++)
for(int j=0; j<=amount; j++)
arr[i,j] = Math.Min(arr[i-1,j], 1 + arr[i,(j-coins[i])]);