給定硬幣數組[1, 3, 7, 12]
和總數(29)查找需要補償金額的最小數量(正確答案是4)。查找哪個硬幣組成總數的最小值
我的代碼正確地找到了最小數量的硬幣,但沒有使用哪個硬幣來獲得最小值。我試着用字典來做,但我得到了很高的數字。
def changeSlow(coinValueList, total, coinDict):
if total == 0:
return 0
res = sys.maxint
for i in range(len(coinValueList)):
if coinValueList[i] <= total:
sub_res = changeSlow(coinValueList, total-coinValueList[i], coinDict)
if sub_res != sys.maxint and sub_res + 1 < res:
res = sub_res + 1
if coinValueList[i] not in coinDict:
coinDict[coinValueList[i]] = 0
else:
coinDict[coinValueList[i]] += 1
return res
coins = [1, 3, 7, 12]
coinDict = {}
print(changeSlow(coins, 29, coinDict)) >> gives 4 correctly
print(coinDict) >> gives {1: 190992, 3: 190992: 7: 190992, 12:190992}
我得到的輸出是不正確的,不知道爲什麼我收到一個錯誤:
>> 4
>> {1: 190992, 3: 190992: 7: 190992, 12:190992}
任何人都可以給我什麼,我做錯了什麼祕訣嗎?我應該提到,我必須使用某種遞歸來實現此解決方案。
請說明你的變量是指在你的程序做的,所以我們可以更好的爲您提供幫助。其不明確。你也應該分開程序的輸出。 – deltashade