嗨,我正在做一些动态编程练习,并遇到了Bestsum问题,在这个问题中,你得到了一个Targetnumber和一个数字数组,你必须使用数组中的数字找到最短的和来获得目标数,例如,给定函数Bestsum(7,[1,2,4](,它会返回[4,2,1]
def howsum(targetsum, numbers, memo = {}):
if targetsum in memo:
return memo[targetsum]
if targetsum == 0:
return []
if targetsum < 0:
return None
shortestcombination = None
for n in numbers:
remainder = targetsum - n
result = howsum(remainder, numbers, memo)
if result != None:
combination = []
combination = result
combination.append(n)
if shortestcombination == None or len(combination) < len(shortestcombination):
shortestcombination = combination
memo[targetsum] = shortestcombination
return shortestcombination
if __name__ == '__main__':
print(howsum(7, [1, 4, 2]))
这是我的代码女巫在我评论备忘录[targetsum]=最短组合时给出的解决方案,我不知道我的备忘录出了什么问题,所以如果你能帮助,请提前感谢
我发现了这个问题,它与python中的列表操作有关。问题在于";composition.append(n(";append在适当的位置修改列表,这就是在memo中产生bug的原因。因此解决方案是使用语法";组合=组合+[n]";这样代码就创建了一个新的列表,并将其分配给组合,从而修复了错误。
如果你想要更多的细节,这里是另一个解释列表的+=运算符vs=+的线程
为什么+=在列表中的行为出乎意料?