在恒定时间内换硬币的方法有多少?

假设我有三种类型的硬币——一分钱 (0.01)、一分钱 (0.05) 和一角钱 (0.10),我想找到兑换一定金额的方法的数量。例如更改 27 美分:

change(amount=27, coins=[1,5,10])

解决此问题的一种更常见的方法是递归/动态地:找到在没有特定硬币的情况下进行更改的方法数量,然后减去该硬币数量并找到使用该硬币进行更改的方法。

但是,我想知道是否有办法使用缓存值和 mod 运算符来做到这一点。例如:

  1. 10 美分可以通过 4 种方式更改:

    • 10 便士
    • 1 角钱
    • 2 镍
    • 1 镍,5 便士
  2. 5 美分可以通过两种方式更改:

    • 1 镍
    • 5 便士
  3. 1-4 美分可以通过 1 种方式改变:

    • 1-4 便士

例如,这是错误的,但我的想法是:

def change(amount, coins=[1,5,10]):
    cache = {10: 4, 5: 2, 1: 1}
    for coin in sorted(coins, reverse=True):
        # yes this will give zerodivision
        # and a penny shouldn't be multiplied
        # but this is just to demonstrate the basic idea
        ways = (amount % coin) * cache[coin]
        amount = amount % ways
    return ways

如果是这样,该算法将如何工作?任何语言(或伪语言)都可以。

以上是在恒定时间内换硬币的方法有多少?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>