如何从给定列表中选择一些数字,使其总和为某个给定数字?
示例:
wanted_num = 10
my_list = [1, 3, 11, 123, 5, 4]
=> [1, 5, 4]
答案 0 :(得分:2)
这是一种可行的方法:
def find_combinations(list, sum):
if not list:
if sum == 0:
return [[]]
return []
return find_combinations(list[1:], sum) + \
[[list[0]] + tail for tail in
find_combinations(list[1:], sum - list[0])]
对于您的示例,这将返回:
>>> print find_combinations([1, 3, 11, 123, 5, 4], 10)
[[1, 5, 4]]
答案 1 :(得分:1)
这是一个更通用的版本,它检查的不仅仅是对(基本上,任何n元组加起来都是必需的目标)
def findSum(target, L, sofar=None):
if sofar is None:
sofar = []
if not target:
print(sofar)
return
if target < 0:
return
for i,num in enumerate(L):
findSum(target-num, L[:i]+L[i+1:], sofar+[num])
输出:
In [34]: findSum(10, [1,3,11,123,5,7])
[3, 7]
[7, 3]
请注意,它不排除类似的集合
答案 2 :(得分:-2)
以下解决方案应该有效:
wanted_num = 10
my_list = [1, 3, 11, 123, 5, 7]
for i in range(0, len(my_list)):
for j in range(0, len(my_list)):
if i + j == wanted_num:
answer = [i, j]
break
print(answer)
此解决方案假设只有两个数字加起来为wanted_num
。
希望它有所帮助。