我在接受采访时被问到了这个问题.鉴于以下列表:
[1,2,5,7,3,10,13]
找到最多相加的数字5.
我的解决方案如下:
#sort the list:
l.sort()
result = ()
for i in range(len(l)):
for j in range(i, len(l)):
if l[i] + l[j] > 5:
break
elif l[i] + l[j] == 5:
result += (l[i], l[j])
我提出的想法是对列表进行排序,然后循环并查看总和是否大于5.如果是,那么我可以停止循环.我觉得面试官对这个答案不满意.有人可以建议一个更好的一个供我将来参考吗?
最佳答案 这将返回总和为5的输入的powerset的所有元素:
>>> input = [1,2,5,7,3,10,13]
>>> import itertools
>>> def powerset(l):
... return itertools.chain.from_iterable((itertools.combinations(l, i) for i in range(len(l)+1)))
...
>>> filter(lambda v: sum(v) == 5, powerset(input))
[(5,), (2, 3)]