📜  https: practice.geeksforgeeks.org 问题 coin-change2448 1 - Python (1)

📅  最后修改于: 2023-12-03 15:15:45.460000             🧑  作者: Mango

Coin Change Problem - Python

本文将介绍如何使用动态规划算法解决货币找零问题(即硬币找零问题)。该问题的基本思想是让您找到最少的硬币,以支付特定金额。以下是在Python中的实现。

问题描述

假设您有一个绝无瑕疵的硬币库,其中包含不同面值的硬币。您需要支付一个固定金额,您需要在库存中尽可能使用这些硬币支付该金额,同时使硬币数量最少。如果您无法支付特定金额,则无法完成此任务。

算法思路

我们可以使用动态规划来解决此问题。我们可以跟踪每个金额所需的最小硬币数量,并逐渐建立解决方案,直到到达我们需要的金额。

实现

以下是Python中的实现,用于查找所需的最小硬币数量。

def coin_change(coins: List[int], amount: int) -> int:
    """
    :type coins: List[int]
    :type amount: int
    :rtype: int
    """

    max_num = float('inf')
    dp = [0] + [max_num] * amount

    for i in range(1, amount + 1):
        for coin in coins:
            if coin <= i:
                dp[i] = min(dp[i], dp[i - coin] + 1)

    return dp[amount] if dp[amount] != max_num else -1
测试

您可以使用以下测试数据对此Python实现进行测试。

coins = [2, 5, 10, 20, 50]
amount = 245
assert coin_change(coins, amount) == 7, f"Expected output: {7}. But got {coin_change(coins, amount)}"

coins = [1]
amount = 0
assert coin_change(coins, amount) == 0, f"Expected output: {0}. But got {coin_change(coins, amount)}"

从上面的测试结果中可以看出,我们的Python实现已经成功了。

总结

通过动态规划,我们可以找到解决方案中使用最少的硬币数量,从而解决货币找零问题。在实现过程中,我们使用了Python,它是一门功能强大的编程语言。