我知道有很多类似的问题,我已经阅读了几个小时。但似乎没有一个符合我的要求。
我有列表列表(列表<列表<字符串>>)列表可以是任意大小。
例子:
我的外部列表大小是:4
清单内容
1. list(0) a,b,c size:3
2. list(1) d,b,f,m size:4
3. list(2) x,a size:2
4. list(3) b,e,d,m,a size:5
在这里我的组合将是
adxb
adxe
adxd (adx) duplicate element will be removed after generating combination
adxm
adxa (adx)
adab (adb)
adae (ade)
...
...很快
我必须通过从每个列表中选择一个元素来生成组合组合长度最大为 4(外部列表的大小),有时如果我在组合中获得相同的元素,它会缩小
我的组合数量将是每个内部列表中元素数量的乘积。
在上面的示例中,组合的数量将是3x4x2x5=120
组合
由于我的列表包含重复的元素,如果我有adab adba ,那么我也会在这里得到重复的组合,那么adba是重复的,因为顺序无关紧要。
问题是我使用简单的方法来生成组合,如果我的外部列表大小增加并且我的内部列表包含更多元素,我最终会生成数百万的组合,但只有 1000 或 2000 将是唯一的其余所有重复项。
是否有任何算法方法可以仅生成唯一组合而不是生成所有组合?