java全排列去重代码
时间: 2023-05-29 14:02:05 浏览: 108
java全排列
以下是Java中用于去重全排列的代码示例:
```java
import java.util.Arrays;
public class Permutations {
public static void main(String args[]) {
int[] arr = {1, 2, 3};
permuteUnique(arr, 0, arr.length - 1);
}
public static void permuteUnique(int[] arr, int left, int right) {
if (left == right) {
System.out.println(Arrays.toString(arr));
} else {
for (int i = left; i <= right; i++) {
if (shouldSwap(arr, left, i)) {
swap(arr, left, i);
permuteUnique(arr, left + 1, right);
swap(arr, left, i);
}
}
}
}
private static boolean shouldSwap(int[] arr, int start, int curr) {
for (int i = start; i < curr; i++) {
if (arr[i] == arr[curr]) {
return false;
}
}
return true;
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
```
该程序使用递归来获取给定数组的所有排列。 shouldSwap() 方法用于检查给定位置的元素是否应该与之前的元素进行交换,以确保不会生成重复排列。swap() 方法用于在两个索引之间交换元素。
阅读全文