分而治之 - 最低硬币 - 将硬币作为数组返回

时间:2017-02-04 03:07:52

标签: python algorithm divide-and-conquer

以下是针对最小硬币更换问题的强力解决方案。它需要一个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))

1 个答案:

答案 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)

您还必须更新其他测试。