算法硬币找零问题

win10+python3.8
问题:自定义硬币体系,最少找零数

#找零递归
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,21,25],63))

#找零加缓存改进
def recDC(coinValueList,change,knownResults):
    minCoins = change
    if change in coinValueList :
        knownResults[change] = 1
    elif knownResults[change] >0 :
        return knownResults[change]
    else:
        for i in [c for c in coinValueList if c <= change]:
            numCoins = 1 +recDC(coinValueList, change - i ,knownResults )
            if numCoins <minCoins :
                minCoins = numCoins

                knownResults[change] = minCoins
    return minCoins
print(recDC([1,5,10,25],63,[0]*64))

#找零动态规划
def deMakeChange(coinValueList,change,minCoins):
    for cents in range(1,change +1):
        coinCount = cents
        for j in [c for c in coinValueList if c <= cents]:
            if minCoins[cents - j] + 1 < coinCount :
                coinCount = minCoins[cents - j ] + 1
        minCoins[cents] = coinCount

    return minCoins[change]

print(deMakeChange([1,5,10,21,25],63,[0]*64))


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值