Teil 1 lässt sich wunderbar (und relativ einfach) mit Rekursion lösen. Für Teil 2 benötigt man zwingend eine kleine Erweiterung um die dynamische Programmierung zu nutzen - es müssen nämlich etwa einige Billionen (!) Kombinationen gefunden bzw. berechnet werden. Bei der dynamischen Programmierung werden Zwischenergebnisse gespeichert und später mehrfach wiederverwendet, um nicht wieder und wieder dasselbe zu berechnen.
Vorgehensweise:
ArrayList<String>
ein.continue;
→ Der Rest der Towel-Schleife wird übersprungen und der nächste Schleifendurchlauf wird begonnen).return
-Aufruf nie stattgefunden hat, dass also keine Lösung gefunden wurde. So muss nun 0 zurückgegeben werden.Es müssen nur kleine Änderungen vorgenommen werden.