Python程式:查詢硬幣組合數量以達到目標值
假設我們有一列硬幣和另一個值amount,我們需要找到總和為amount的組合數量。如果答案非常大,則將結果模 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,執行以下操作:
- 對於從1到dp大小的範圍內的每個i,執行以下操作:
- 如果 i - d >= 0,則:
- dp[i] := dp[i] + dp[i - d]
- 如果 i - d >= 0,則:
- 對於從1到dp大小的範圍內的每個i,執行以下操作:
- 返回 (dp的最後一個元素) 模 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
廣告