在 Python 中找到达目标所需的硬币组合数

在 Python 中找到达目标所需的硬币组合数

假设我们有一组硬币,和一个目标金额,我们要找到有多少种组合能够达到这个金额。如果答案很大,那么对 10 ^ 9 + 7 取模。

因此,如果输入是 coins = [2, 5] amount = 10,那么输出将是 2,因为我们可以做出以下组合 – [2, 2, 2, 2, 2],[5, 5]。

为了解决这个问题,我们将按照以下步骤进行 –

  • 将 m 设为 10 ^ 9 + 7
  • dp:= 长度与amount + 1 相同的列表,并用 0 填充
  • 将 dp[0] 设为 1
  • 对于 coins 中的每个 d,执行以下操作
    • 对于 dp 列表的长度范围从 1 到 size,执行以下操作:
      • 如果 i – d >= 0:
      • 将 dp[i] 设为 dp[i] + dp[i – d]
  • 返回 dp 的最后一个元素 mod m

以下是实现的更好理解的实例 –

示例

class Solution:
   def solve(self, coins, amount):
      dp = [0] * (amount + 1)
      dp[0] = 1
      for d in coins:
         for i in range(1, len(dp)):
            if i - d >= 0:
               dp[i] += dp[i - d]
      return dp[-1] % (10 ** 9 + 7)
ob = Solution()
coins = [2, 5]
amount = 10
print(ob.solve(coins, amount))

输入

[2, 5], 10

输出

2

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程