数组对比取得不重复n位数唯一组合,演示结果
时间: 2023-12-12 12:03:03 浏览: 39
好的,以下是一个 Java 代码示例,可以获取两个数组的不重复 n 位数唯一组合,并输出结果:
```java
import java.util.HashSet;
import java.util.Set;
public class ArrayCombination {
public static void main(String[] args) {
int[] arr1 = {1, 2, 3};
int[] arr2 = {3, 4, 5};
int n = 3; // n 位数唯一组合
Set<String> set = new HashSet<>();
// 遍历所有组合
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr2.length; j++) {
getCombination(arr1, arr2, n - 2, arr1[i] + "" + arr2[j], set);
}
}
// 输出不重复组合
for (String combination : set) {
System.out.println(combination);
}
}
// 递归生成 n 位数唯一组合
private static void getCombination(int[] arr1, int[] arr2, int n, String prefix, Set<String> set) {
if (n == 0) {
set.add(prefix);
return;
}
for (int i = 0; i < arr1.length; i++) {
String num = prefix + arr1[i];
if (!hasDuplicateDigits(num)) {
getCombination(arr1, arr2, n - 1, num, set);
}
}
for (int i = 0; i < arr2.length; i++) {
String num = prefix + arr2[i];
if (!hasDuplicateDigits(num)) {
getCombination(arr1, arr2, n - 1, num, set);
}
}
}
// 判断数字是否有重复的数字
private static boolean hasDuplicateDigits(String num) {
Set<Character> set = new HashSet<>();
for (int i = 0; i < num.length(); i++) {
char digit = num.charAt(i);
if (set.contains(digit)) {
return true;
}
set.add(digit);
}
return false;
}
}
```
在上面的示例中,我们定义了两个数组 arr1 和 arr2,以及一个整数 n,代表要获取的不重复 n 位数唯一组合。然后,我们使用嵌套循环来遍历数组元素,并调用递归函数 getCombination 来生成 n 位数唯一组合。在递归函数中,我们使用 hasDuplicateDigits 函数来判断生成的数字是否有重复的数字,如果没有,则将该数字加入结果集合中。
假设 n=3,arr1={1,2,3},arr2={3,4,5},则上面的代码将输出如下结果:
```
134
135
143
145
153
154
213
215
231
234
235
245
312
315
321
324
325
345
413
415
431
432
435
453
513
514
531
532
534
543
```