下面是最小硬币变化问题的蛮力解决方案。它需要一个int更改,也就是需要进行的更改,以及一系列硬币面值。它返回进行更改所需的最低硬币。
我如何修改它以同时返回一组硬币?
例如,如果要求给出值为[1,2,5]的10美分的零钱,它应该返回2个硬币分钟和一个数组[0,0,2]的2个硬币。
def recMC(coinValueList,change):
minCoins = change
if change in coinValueList:
return 1
else:
for i in [c for c in coinValueList if c <= change]:
numCoins = 1 + recMC(coinValueList,change-i)
if numCoins < minCoins:
minCoins = numCoins
return minCoins
print(recMC([1,5,10,25],63))
与任何递归函数一样,您从保护条件开始—该测试告诉您何时完成:
if change in coinValueList:
return 1
要将其转换为硬币列表,只需返回由1个硬币组成的列表:
if change in coinValueList:
return [ change ]
在函数的另一部分,您知道递归调用将返回一个列表。因此,只需将列表扩大:
numCoins = 1 + recMC(coinValueList,change-i)
变成:
coins = [ i ] + recMC(coinValueList, change - i)
您还必须更新其他测试。
下面是最小硬币兑换问题的强力解决方案。它需要一个整数A(这是需要进行的更改)和一组硬币面额。它返回一个对象results,该对象具有基于硬币面额数组和硬币数组可以返回的最小硬币数。 例如,如果要求以的值为美分提供零钱,则它应返回分钟硬币和两个一角硬币的数组。 它返回正确的最小值,但不是正确的硬币数组。
具体而言,问题是: 给定面额数组<代码>硬币[],每个硬币的限制数组<代码>限制[]和数量<代码>金额,返回所需的最小硬币数量,以获取<代码>金额,或者如果不可能,返回空值。另外,用溶液中使用的每个硬币的数量填充数组 这是我的解决方案: 但它一般不起作用。 我的问题是,例如,在这种情况下: 最佳解决方案是: 并且我的算法给出作为结果。换句话说,它失败了,每当在某种情况下,我将不得不使用比可能的更少
这是Leetcode的硬币兑换问题,在这里,给定面额的硬币是无限的,你必须找到满足给定金额所需的最小硬币。我尝试使用自顶向下的1D缓存阵列解决这个问题。基本测试用例通过了,但对于一些较大的总和和面额值,它失败了。我的假设是,我在遍历数组时做错了什么,可能遗漏了一些子问题的计算,但无法找到解决问题的方法。 问题陈述: 我的解决方案:
所以我对编码不熟悉,我得到了一个任务,我需要做一个程序,用四分之一、一角、五分和一美分给不到一美元的零钱。然而,作业希望程序打印所需的最低硬币数量(例如,如果我输入58美分,那么输出应该是“2个25美分,1个镍和3个便士”,而不是“2个25美分,0个10美分,1个镍和3个便士”。本质上,如果没有某种硬币,那么程序就不应该打印它)。我一直在想如何制作它,这样程序就不会打印任何不必要的硬币。 这就是我
我正试图解决一个经典的动态规划硬币兑换问题。这是一个家庭作业问题,我不是在寻找完整的解决方案,只是想找几个指针看看我做错了什么。 输入: 金额我们想用硬币支付一些价值 集合表示面值(1c、5c、10c、25c、100c、200c)的可用硬币数量 输出: 需要换手支付的最低硬币数。 假设: 收银机操作员有无限的硬币供应,知道如何给最佳的变化。 到目前为止,我试图做的是: 我试图建立一个数组C,使得每
动态规划变更问题(有限硬币)。我正在尝试创建一个以以下内容作为输入的程序: 输出: 输出应该是大小为1的数组,其中每个单元格代表我们需要改变单元格索引量的最佳硬币数。 假设数组的单元格位于index: 5,内容为2。这意味着为了给出5(INDEX)的变化,您需要2(单元格的内容)硬币(最佳解决方案)。 基本上,我需要这个视频的第一个数组的输出(C[p])。这与有限硬币的大区别是完全相同的问题。链接