多个长度数组对比取得n个不重复组合
时间: 2023-06-24 11:07:00 浏览: 76
取不重复的N个随机数
假设有两个长度为n的数组A和B,要取得所有的不重复组合。
一种简单的方法是使用两个嵌套的循环,将A中每个元素与B中每个元素一一组合。这样做的时间复杂度是O(n^2)。
如果有多个长度为n的数组,可以使用递归来实现。假设有k个数组A1, A2, ..., Ak,要取得所有的不重复组合,可以进行如下操作:
1. 将A1中的每个元素与A2, A3, ..., Ak的组合进行递归,得到所有可能的k-1元素组合。
2. 将每个k-1元素组合与A1中的元素组合起来,得到所有可能的k元素组合。
3. 递归结束条件是只剩下一个数组,此时直接返回该数组的所有元素作为结果。
这样做的时间复杂度是O(n^k)。
下面是一个示例代码,可以取得任意数量数组的所有不重复组合:
```python
def get_combinations(arrays):
if len(arrays) == 1:
return [[x] for x in arrays[0]]
result = []
for x in arrays[0]:
sub_combinations = get_combinations(arrays[1:])
for sub_combination in sub_combinations:
combination = [x] + sub_combination
result.append(combination)
return result
# 示例用法
A = [1, 2, 3]
B = ['a', 'b', 'c']
C = ['x', 'y', 'z']
combinations = get_combinations([A, B, C])
print(combinations)
```
输出结果为:
```
[[1, 'a', 'x'], [1, 'a', 'y'], [1, 'a', 'z'], [1, 'b', 'x'], [1, 'b', 'y'], [1, 'b', 'z'], [1, 'c', 'x'], [1, 'c', 'y'], [1, 'c', 'z'], [2, 'a', 'x'], [2, 'a', 'y'], [2, 'a', 'z'], [2, 'b', 'x'], [2, 'b', 'y'], [2, 'b', 'z'], [2, 'c', 'x'], [2, 'c', 'y'], [2, 'c', 'z'], [3, 'a', 'x'], [3, 'a', 'y'], [3, 'a', 'z'], [3, 'b', 'x'], [3, 'b', 'y'], [3, 'b', 'z'], [3, 'c', 'x'], [3, 'c', 'y'], [3, 'c', 'z']]
```
阅读全文