Python硬币更改如此关闭

发布于 2021-01-29 16:51:08

我在做找零钱的问题。我已经解决了这个问题,因为它会打印出我需要进行最少更改的硬币数量,但是我该如何更改程序以使其也打印那些硬币呢?

这是一个示例I/O

输入: coin_change(48, [1, 5, 10, 25, 50])

输出: [6, [25, 10, 10, 1, 1, 1]]

目前,我的代码仅返回6

顺便说一句,这只能通过递归来完成。 不允许循环

码:

def change(C, V):
    def min_coins(i, aC):
        if aC == 0:
            return 0
        elif i == -1 or aC < 0:
            return float('inf')
        else:
            return min(min_coins(i-1, aC), 1 + min_coins(i, aC-V[i]))
    return min_coins(len(V)-1, C)
关注者
0
被浏览
39
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    程序的其他版本:

    def change(C, V, res=None):
        res = [] if res is None else res
        if len(V) == 0:
            return len(res), res
        maxx = max(V)
        V.remove(maxx)
        ans = C//maxx
        if ans == 0 and maxx < C :
            res += [maxx] * ans
            return len(res), res
        else:
            res += [maxx] * ans
            return  change(C % maxx, V, res)
    
    print change(48,[1, 5, 10, 25, 50])
    print change(30,[25, 10, 2, 3, 1])
    

    输出:

    (6, [25, 10, 10, 1, 1, 1])
    (3, [25, 3, 2])
    

    PS:如果您愿意,我会添加一个说明。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看