python里面兑换零钱代码
时间: 2024-09-24 14:10:35 浏览: 53
在 Python 中,我们可以编写一段代码来解决兑换零钱的问题。这个问题通常涉及到给定一组面额,计算最小组合能够得到指定金额的方式。例如,假设我们有面额为[1, 5, 10],目标金额为23,我们需要找寻最小的硬币组合。
这是一个简单的动态规划解决方案:
```python
def coin_change(coins, amount):
# 创建一个二维列表,表示从0到amount的最小硬币组合数
dp = [[False] * (amount + 1) for _ in range(len(coins) + 1)]
# 初始化基础情况
dp[0][0] = True
for i in range(1, len(dp)):
dp[i][0] = True
# 动态规划填充表
for i in range(1, len(coins) + 1):
for j in range(1, amount + 1):
if coins[i - 1] <= j:
dp[i][j] = dp[i - 1][j] or dp[i][j - coins[i - 1]]
else:
dp[i][j] = dp[i - 1][j]
# 结果存储在dp[len(coins)][amount]
return dp[len(coins)][amount] if dp[len(coins)][amount] else -1 # 返回None或者特定表示找不到的值
# 示例
coins = [1, 5, 10]
amount = 23
print(coin_change(coins, amount)) # 输出:3,因为可以是10+10+3的组合
```
这段代码通过填充一个状态转移矩阵来解决问题,其中`dp[i][j]`表示得到金额j所需的最小硬币组合数,对于每个面额,从较大的金额开始尝试,选择使用或者不使用该面额。
阅读全文