用java写一段速度快的排列组合算法
时间: 2024-02-24 17:59:48 浏览: 21
以下是使用Java编写的排列组合算法:
```java
public class CombinationPermutation {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
int r = 2;
System.out.println("Permutation:");
permutation(arr, r);
System.out.println("\nCombination:");
combination(arr, r);
}
private static void permutation(int[] arr, int r) {
int[] result = new int[r];
boolean[] used = new boolean[arr.length];
permutationHelper(arr, result, used, 0);
}
private static void permutationHelper(int[] arr, int[] result, boolean[] used, int index) {
if (index == result.length) {
System.out.println(Arrays.toString(result));
return;
}
for (int i = 0; i < arr.length; i++) {
if (!used[i]) {
result[index] = arr[i];
used[i] = true;
permutationHelper(arr, result, used, index + 1);
used[i] = false;
}
}
}
private static void combination(int[] arr, int r) {
int[] result = new int[r];
combinationHelper(arr, result, 0, 0);
}
private static void combinationHelper(int[] arr, int[] result, int index, int start) {
if (index == result.length) {
System.out.println(Arrays.toString(result));
return;
}
for (int i = start; i < arr.length; i++) {
result[index] = arr[i];
combinationHelper(arr, result, index + 1, i + 1);
}
}
}
```
这里提供了两种方法:排列和组合。`permutation`函数使用回溯算法来生成数组的所有排列,而`combination`函数使用递归算法来生成数组的所有组合。