硬币改变算法使用递归

时间:2018-05-21 03:39:58

标签: python algorithm recursion

给出一组硬币和目标。需要使用递归打印列表中可能的所有解决方案。

我已经提出解决方案在单个列表中打印所有解决方案。如何将其列为清单列表?请指教。

def coin_change(A, target):
    if target in A:
        return [target]
    ll = []
    for i in A:
        if i < target:
            ll = ll + [i] + coin_change(A, target - i) 
        else:
            ll = ll +  [-1]
    return ll

coins = [3,10,7]
target = 5

1 个答案:

答案 0 :(得分:2)

可能有不同的方法可以做到这一点,这是一个可以在备选解决方案的希望可理解的列表结构中返回所有潜在结果,甚至重复的结果:

def coin_change(coins, target):
    ''' returns a list of lists of alternate solutions '''

    if target in coins:
        return [[target]]  # only one possibility, base case

    possibilities = []

    for coin in coins:
        if coin < target:
            possibilities += [[coin, *possibility] for possibility in coin_change(coins, target - coin)]

    return possibilities

print(coin_change([5, 10, 25], 30))

<强>输出

[[5, 25], [10, 5, 5, 10], [10, 5, 10, 5], [10, 10, 10], [25, 5]]

如果没有解决方案,则应返回空列表。