生成数字列表的所有可能组合并使用特定总和获取组合的代码:
combos = []
for each in combinations_with_replacement(list, number):
if sum(list(map(int, each))) == particular_number:
combos.append(list(map(int, each)))
代码工作正常。但问题是如果函数 combinations_with_replacement 中的数字参数大于8,则需要花费大量时间。是否有一种优化的方式可以替换我的逻辑?
答案 0 :(得分:1)
首先,退出重复工作。
combos
的列表吗?递归解决方案的基本思想是:
# Given: remaining target sum and list of numbers (lon) to use
if target = 0:
return []
if target < 0 or len(lon) == 0:
return None
if target >= lon[0]:
# add one of the first number; recur
result = sum_to_target(target - lon[0], lon)
return result + [lon[0]] if result else None
# Done with this number; try the rest of the list
result = sum_to_target(target, lon[1:])
return result if result else None
尝试使用和不使用列表的第一个数字的每个步骤。 如果超出目标或用完数字,则会失败。 如果您完全达到了目标,那么您就成功了:在爬行调用堆栈时构建有效的数字集。
请注意,我已经将所有解决方案连接起来作为练习的问题......以及一些调试和边界细节。