输入n个列表,每个列表可能包含n个元素。我想找到每个输入列表至少包含一个元素的所有组合。 2个长度为2的输入列表的示例
input 1: {1,2}
input 2: {3,4}
expected result:
{{1,3}, {1,4}, {2,3}, {2,4}, {1,2,3}, {1,2,4}, {1,3,4}, {2,3,4}, {1,2,3,4}}
可扩展到具有n个元素的n个输入列表
答案 0 :(得分:0)
基本上,您可以将二进制数从1
计数到2^n - 1
。每一套。
然后,为每组选择一个数字,以提供(2^n - 1)^n
个组合。
二进制数字告诉您要包括(1)哪些元素(0)。
在上面的示例中(假设{1, 2, 3, 4}
确实是预期结果的一部分),您将拥有9 = 3^2 = (2^2 - 1)^2
个组合。
因为答案解释不充分,所以请进一步解释。
让我坚持您的榜样。我们有
由于省略了0 = 00b,因此可以确保从每个集合中至少选择一个元素。
现在,我们为每组选择一个数字。这样
(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2)和(3,3)。
如果用第一个集合中的相应元素集替换第一个数字,并用第二个集合中的对应元素替换第二个数字,则将获得所需的结果:
基本上,您只是在2 ^ n-1个数字系统中进行计数。该数字的范围是0到2 ^ n-2。所以我们有00、01、02、10、11、12、20、21、22,它们与上面的列表完全对应,只是数字比1小1它们对应的数字。