Python求解零钱兑换问题
题目:(力扣322)
给定不同面值的硬币 coins 和一个总金额S。编写一个函数来计算可以凑成总金额所需的最少的硬币个数,并返回硬币的组合。如果没有任何一种硬币组合能组成总金额返回-1。
(每种硬币的数量是无限的,S以及coins中的元素都是正整数)
学习参考:
零钱兑换–思路分析
零钱兑换Python----代码
问题分析:
零钱兑换问题是动态规划问题的一种,根据动态规划问题的三个步骤求解。
-
定义原问题和子问题
原问题:可以凑成总金额S所需的最少的硬币个数。
子问题:可以凑成目标金额x(x≤S)所需的最少的硬币个数。 -
定义状态
记f(x)为凑成目标金额x所需的最少的硬币个数,这里的目标金额x就表示子问题所对应的状态。 -
寻找状态转移方程
这里举例说明状态如何转移
代码部分
def coin_change(coins, money):
if money == 0:
return '没钱换个屁'
res =