Schreiben Sie ein Programm, das, in Anbetracht der Menge N, um für und die Anzahl der Arten von m unendlich verfügbaren Münzen zu ändern, und eine Liste von M-Münzen, wie viele verschiedene Möglichkeiten Sie von den Münzen zu STDOUT wechseln können. Meine Intuition war, für jede Münze, diese Münze zu versuchen, und recurse auf n - c, wobei c der Wert der Münze ist, 1 zurückgebend, wenn ich zu Null komme und 0, wenn ich unter Null komme. Ich habe die vorher verwendete Münze eingestrichen und bin nur auf Münzen zurückgegangen, die kleiner oder gleich der vorherigen Münze waren, um Duplikate zu verhindern. Ich bin verwirrt, warum dieser Ansatz falsch ist und wie ich ihn korrigieren kann.Warum funktioniert diese Lösung nicht für den Münzwechselalgorithmus?
Hier ist mein Code:
def calc_change(n, coins):
cache = {}
c = max(coins)
nums = calc_ways(n, coins, cache, c)
return nums
def calc_ways(n, coins, cache, current_coin):
if n < 0:
return 0
if n == 0:
return 1
if n not in cache:
cache[n] = sum(calc_ways(n - c, coins, cache, c) for c in coins if c <= current_coin)
return cache[n]
answer = calc_change(n, coins)
print answer
Sie für jede Hilfe danken.
Es scheint zu funktionieren. Warum denken Sie nicht? – Pablo
Ich führe es auf hackerrank und bekomme, dass das Ergebnis falsch ist – Jared
Ich denke Ihr Problem ist, dass 'Cache' speichert, wie viele mögliche Kombinationen es für' n' gibt, aber es berücksichtigt nicht das 'current_coin'. – Pablo