我正在尝试返回一个数组,以求一个数字的总和。
因此,如果m为143并且coin = [200,100,50,20,10,5,2,1],它将返回[0,1,0,2,0,0,1,1]的含义没有200个硬币,一个100个硬币,没有50个硬币,两个20个硬币,没有10个硬币,没有5个硬币,一个2个硬币和1个1个硬币。
现在我的解决方案返回5,这是硬币的数量。
def coinSplit(m):
if m == 0:
return 0
for i in range(len(coin)):
if coin[i] <= m:
return 1 + coinSplit(m-coin[i])
coin = [200, 100, 50, 20, 10, 5, 2, 1]
print(coinSplit(143))
答案 0 :(得分:3)
以下迭代实现有效:
def coinSplit(m):
res = []
for c in coin:
num = m // c
m = m % c
res.append(num)
return res
>>> coinSplit(143)
[0, 1, 0, 2, 0, 0, 1, 1]
这里假设一个硬币池,这种贪婪的方法总是会产生结果。 如果您希望此操作是递归的,可以尝试:
def coinSplit(m, coins):
if m == 0:
return [0 for coin in coins]
return [m // coins[0]] + coinSplit(m % coins[0], coins[1:])
>>> coinSplit(143, [200, 100, 50, 20, 10, 5, 2, 1])
[0, 1, 0, 2, 0, 0, 1, 1]
答案 1 :(得分:0)
关键是在python中使用算术运算符。具体划分/
和模量'%'
通过遍历列表直到余数为零来获得商和余数。
硬币= [200、100、50、20、10、5、2、1]
例如:
重复该过程,直到剩余为零
答案 2 :(得分:0)
您将返回所需的总硬币数量,而不管其价值。您需要跟踪每个硬币的数量,假设我想创建一个与输入大小相同的列表(coin = [200, 100, 50, 20, 10, 5, 2, 1]
),并用零初始化它,作为其他答案,请使用添加到正确的索引模数,然后返回此列表。您仍然可以将其编写为递归,但可以执行另一项操作以添加正确的索引。
我认为这就像是一项家庭作业,因此我没有为您提供代码。我希望这有帮助。