完整代码:
# 动态规划最少硬币数找零
def dpMakeChange(coinValueList, change, minCoins, coinsUsed):
for cents in range(change + 1):#依次循环从0到所需兑换面值的每一个面值
coinCount = cents #初始化最优解为当前面值数
newCoin = 1 #初始化找零硬币面值列表中的面值
for j in [c for c in coinValueList if c <= cents]:#在不大于要找零的硬币面值列表中循环
# 注:minCoins[cents - j] + 1 = cents - j的最优解 + 1(1是j的最优解,因为j为一个硬币) = cents的最优解 - j的最优解 + j的最优解 = cents的最优解,所以下一行代码的意思就是:若当前面值的最优解比上一循环(或初始)当前面值的最优解更小,则
if minCoins[cents - j] + 1 < coinCount:
coinCount = minCoins[cents - j] + 1 #临时保存当前面值的最优解
# 将当前硬币面值j临时保存为当前找零面值在找零硬币面值列表中的对应值
newCoin = j
minCoins[cents] = coinCount #记录当前找零面值在找零最优解列表中的最优解
coinsUsed[cents] = newCoin#记录当前找零面值在找零硬币面值列表中对应的值
return minCoins[change]#返回待找零数值的最优解
# 获取最终找零的硬币面值
def p