【问题标题】:Divide and Conquer - Minimum Coins - Return Coins as Array分而治之 - 最少硬币 - 以数组形式返回硬币
【发布时间】:2017-06-21 12:30:48
【问题描述】:

以下是最小硬币找零问题的蛮力解决方案。它需要一个 int 更改,这是需要进行的更改,以及一系列硬币面额。它返回进行该更改所需的最少硬币。

如何修改它以同时返回一个硬币数组?

例如,如果要求用值 [1, 2, 5] 找零 10 美分,它应该返回 2 个硬币 min 和一个数组 [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))

【问题讨论】:

  • 对我来说,这看起来像是来自某个解决问题的网站 (example) 的任务,您希望我们为您编写代码吗?你试过什么?

标签: python algorithm divide-and-conquer


【解决方案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)

您还必须更新其他测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2019-07-17
    相关资源
    最近更新 更多