我从某个地方有这个问题,作为练习到数据工程测试。
给出候选编号(C)和目标编号(T)的集合,在C中找到候选编号总和为T的所有唯一组合。
要求: C中的每个数字只能组合使用一次。 C和T始终是正整数
Example: find a target = 6 from a dataset of [3,5,6,1,2]. the solution is
- [3,1,2]
- [5,1]
- [6]
我只知道这是一个Apriori算法,但我不知道如何解决该问题。
答案 0 :(得分:0)
使用itertools.combinations
查找列表中每种可能大小的唯一组合。例如
from itertools import combinations
a = [3,5,6,1,2]
target = 6
result = []
for i in range(1,len(a)+1):
combs = combinations(a, i)
for c in combs:
if sum(c) == target:
result.append(list(c))
print(result) # Output [[6], [5, 1], [3, 1, 2]]