2014-11-22 41 views
-2

如何从给定列表中选择一些数字,以使它们的总和为特定给定数字?从列表中选择一组数字,并将其累加到给定值

例子:

wanted_num = 10 
my_list = [1, 3, 11, 123, 5, 4] 

=> [1, 5, 4] 
+3

请澄清:你想找到2号,其总和为所需的数量,或总计为它的最小尺寸设定?如果有多个和所需数字相加的组合,会发生什么? – arghbleargh 2014-11-22 23:43:48

+1

它可能是多个数字组成的总和。在这种情况下,它只有2 – programmer 2014-11-22 23:46:10

回答

-1

下面的解决方案应该工作:

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。 希望它有帮助。

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

这是一种可行的方法:

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]] 
相关问题