以下是针对最小硬币更换问题的强力解决方案。它需要一个int更改,这是需要进行的更改,以及一系列硬币面额。它返回进行更改所需的最小硬币。
如何修改此项以返回硬币数组?
例如,如果要求用值[1,2,5]给出10美分的变化,它应该返回2个硬币分钟和一个数组[0,0,2]两个镍币。
def recMC(coinValueList,change):
minCoins = change
if change in coinValueList:
return 1
else:
for i in [c for c in coinValueList if c <= change]:
numCoins = 1 + recMC(coinValueList,change-i)
if numCoins < minCoins:
minCoins = numCoins
return minCoins
print(recMC([1,5,10,25],63))
答案 0 :(得分:1)
与任何递归函数一样,您从保护条件开始 - 该测试会告诉您何时完成:
if change in coinValueList:
return 1
要将此转换为硬币列表,只需返回由1枚硬币组成的列表:
if change in coinValueList:
return [ change ]
在函数的其他部分,您知道递归调用将返回一个列表。所以,只需取出列表并将其列为更大的列表:
numCoins = 1 + recMC(coinValueList,change-i)
变为:
coins = [ i ] + recMC(coinValueList, change - i)
您还必须更新其他测试。