/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Main
{
int[] denominations = new int[]{1, 2, 5 , 10};
public static Map
<Integer, Integer
> makeChange
(int amount, Set
<Integer
> coinSet
) { return makeChange(amount, coinSet, new HashMap<>());
}
private static Map
<Integer, Integer
> makeChange
(int amount, Set
<Integer
> coinSet, Map
<Integer, Integer
> currCoinsUsed
) {
if (amount == 0) {
return currCoinsUsed;
}
if (amount < 0) {
return null;
}
for(int coin : coinSet) {
int changeLeft = amount - coin;
currCoinsUsed.put(coin, currCoinsUsed.getOrDefault(coin, 0) + 1);
Map
<Integer, Integer
> res
= makeChange
(changeLeft, coinSet, currCoinsUsed
); if (res != null) {
return res;
}
currCoinsUsed.put(coin, currCoinsUsed.getOrDefault(coin, 0) - 1);
}
return null;
}
public static void main
(String[] args
) { System.
out.
println(makeChange
(50,
Set.
of(1,
5,
10,
25))); // {25=2} System.
out.
println(makeChange
(51,
Set.
of(1,
5,
10,
25))); // {25=2, 1=1} System.
out.
println(makeChange
(6,
Set.
of(1,
5,
10,
25))); // {5=1, 1=1} System.
out.
println(makeChange
(6,
Set.
of(3,
4))); // {3=2} System.
out.
println(makeChange
(10,
Set.
of(3,
4))); // {4=1, 3=2} System.
out.
println(makeChange
(6,
Set.
of(5,
7))); // null System.
out.
println(makeChange
(16,
Set.
of(5,
7,
9))); // {9=1, 7=1} }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgTWFpbgp7CglpbnRbXSBkZW5vbWluYXRpb25zID0gbmV3IGludFtdezEsIDIsIDUgLCAxMH07CgoJCglwdWJsaWMgc3RhdGljIE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBtYWtlQ2hhbmdlKGludCBhbW91bnQsIFNldDxJbnRlZ2VyPiBjb2luU2V0KSB7CgkJcmV0dXJuIG1ha2VDaGFuZ2UoYW1vdW50LCBjb2luU2V0LCBuZXcgSGFzaE1hcDw+KCkpOwogICAgfQogICAgCiAgICBwcml2YXRlIHN0YXRpYyBNYXA8SW50ZWdlciwgSW50ZWdlcj4gbWFrZUNoYW5nZShpbnQgYW1vdW50LCBTZXQ8SW50ZWdlcj4gY29pblNldCwgTWFwPEludGVnZXIsIEludGVnZXI+IGN1cnJDb2luc1VzZWQpIHsKCQkKCQlpZiAoYW1vdW50ID09IDApIHsKCQkJcmV0dXJuIGN1cnJDb2luc1VzZWQ7CgkJfQoJCWlmIChhbW91bnQgPCAwKSB7CgkJCXJldHVybiBudWxsOwoJCX0KCQkKCQlmb3IoaW50IGNvaW4gOiBjb2luU2V0KSB7CgkJCWludCBjaGFuZ2VMZWZ0ID0gYW1vdW50IC0gY29pbjsKCQkJY3VyckNvaW5zVXNlZC5wdXQoY29pbiwgY3VyckNvaW5zVXNlZC5nZXRPckRlZmF1bHQoY29pbiwgMCkgKyAxKTsKCQkJTWFwPEludGVnZXIsIEludGVnZXI+IHJlcyA9IG1ha2VDaGFuZ2UoY2hhbmdlTGVmdCwgY29pblNldCwgY3VyckNvaW5zVXNlZCk7CgkJCWlmIChyZXMgIT0gbnVsbCkgewoJCQkJcmV0dXJuIHJlczsKCQkJfQoJCQljdXJyQ29pbnNVc2VkLnB1dChjb2luLCBjdXJyQ29pbnNVc2VkLmdldE9yRGVmYXVsdChjb2luLCAwKSAtIDEpOwoJCX0KCQkKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1ha2VDaGFuZ2UoNTAsIFNldC5vZigxLCA1LCAxMCwgMjUpKSk7IC8vIHsyNT0yfQogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihtYWtlQ2hhbmdlKDUxLCBTZXQub2YoMSwgNSwgMTAsIDI1KSkpOyAvLyB7MjU9MiwgMT0xfQogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihtYWtlQ2hhbmdlKDYsIFNldC5vZigxLCA1LCAxMCwgMjUpKSk7ICAvLyB7NT0xLCAxPTF9CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1ha2VDaGFuZ2UoNiwgU2V0Lm9mKDMsIDQpKSk7ICAgICAgICAgIC8vIHszPTJ9CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1ha2VDaGFuZ2UoMTAsIFNldC5vZigzLCA0KSkpOyAgICAgICAgIC8vIHs0PTEsIDM9Mn0KICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obWFrZUNoYW5nZSg2LCBTZXQub2YoNSwgNykpKTsgICAgICAgICAgLy8gbnVsbAogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihtYWtlQ2hhbmdlKDE2LCBTZXQub2YoNSwgNywgOSkpKTsgICAgICAvLyB7OT0xLCA3PTF9CiAgICB9Cn0=