4
無制限に利用可能なコインの種類とm種類のコインの種類と数を指定すると、コインからSTDOUTへの変更方法をいくつか出力するプログラムを作成します。コインチェンジアルゴリズムでこのソリューションが機能しないのはなぜですか?
私の直感は、各コインについて、そのコインを試して、n-cで再帰しました。ここで、cはコインの値で、ゼロになると1を返し、ゼロ以下になると0を返します。私は以前に使用したコインを渡し、重複を防止するために、以前のコイン以下のコインでのみ再帰しました。なぜこのアプローチが間違っているのか、どのように修正できるのか混乱しています。
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
は、任意の助けてくれてありがとう:
は、ここに私のコードです。
動作するようです。なぜあなたはそれがないと思いますか? – Pablo
私はhackerrankでそれを実行していると結果が間違っていることを取得しています – Jared
あなたの問題は、 'cache'は' n'のための可能な組み合わせがいくつあるかを格納していますが、 'current_coin'は考慮していないと思います。 – Pablo