我有這個遞回函式:
def coinChange(coins, amount: int, minimum = float('inf'), memo={}) -> int:
if amount in memo: return memo[amount]
if amount < 0: return -1
if amount == 0: return 0
for coin in coins:
x = coinChange(coins, amount - coin, minimum - 1, memo)
minimum = min(x, minimum) if x != -1 else minimum
if minimum == 0: break
memo[amount] = -1 if minimum == float('inf') else minimum 1
return -1 if minimum == float('inf') else minimum 1
當我列印這個:
print(coinChange([2], 3)) #-1
它顯示-1,這是正確的。但是,當我列印這個時:
print(coinChange([1,2,5], 11)) #3
print(coinChange([2], 3)) #the correct answer is -1 but it's showing 2
它顯示3然后2。如您所見,結果print(coinChange([2], 3))奇怪地從-1變為2。
這memo是導致錯誤答案的原因。但是我不知道如何更新函式,以便在每次第一次呼叫之前重新啟動備忘錄coinChange,并且我不想像這樣手動執行此操作print(coinChange([2], 3, memo = {})):
uj5u.com熱心網友回復:
由于以下原因,您共享的代碼未給出您提到的問題
x = coinChange(coins, amount - coin, minimum - 1, memo={})
要使用你的備忘錄,你需要將它傳遞給遞回呼叫
x = coinChange(coins, amount - coin, minimum - 1, memo=memo)
實際上,您不應該使用可變物件作為默認變數,因為多個呼叫將共享同一個實體,問題是使用None
def coinChange(coins, amount: int, minimum=float('inf'), memo=None) -> int:
if memo is None:
memo = {}
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/482936.html
