java 实现n个数的排列组合
时间: 2023-12-12 17:03:31 浏览: 68
可以使用递归的方式实现n个数的排列组合,以下是Java实现的代码示例:
```
import java.util.ArrayList;
import java.util.List;
public class PermutationCombination {
public static void main(String[] args) {
int[] nums = {1, 2, 3};
int n = nums.length;
List<Integer> selected = new ArrayList<>();
boolean[] visited = new boolean[n];
System.out.println("Permutation:");
permutation(nums, n, selected, visited);
System.out.println("Combination:");
combination(nums, n, selected, visited, 0);
}
// 实现n个数的排列
private static void permutation(int[] nums, int n, List<Integer> selected, boolean[] visited) {
if (selected.size() == n) {
System.out.println(selected);
return;
}
for (int i = 0; i < n; i++) {
if (!visited[i]) {
selected.add(nums[i]);
visited[i] = true;
permutation(nums, n, selected, visited);
selected.remove(selected.size() - 1);
visited[i] = false;
}
}
}
// 实现n个数的组合
private static void combination(int[] nums, int n, List<Integer> selected, boolean[] visited, int start) {
if (selected.size() == n) {
System.out.println(selected);
return;
}
for (int i = start; i < n; i++) {
if (!visited[i]) {
selected.add(nums[i]);
visited[i] = true;
combination(nums, n, selected, visited, i + 1);
selected.remove(selected.size() - 1);
visited[i] = false;
}
}
}
}
```
在这个示例中,`permutation`方法实现了n个数的排列,`combination`方法实现了n个数的组合。我们使用了一个`selected`列表来存储已经选中的数字,使用一个`visited`数组来标记哪些数字已经被访问过了。在递归过程中,我们每次选择一个未被访问过的数字,并将其标记为已访问,然后继续递归。当`selected`列表中的数字个数达到n时,就输出该排列或组合,并返回上一层递归。最后,我们在`main`方法中调用`permutation`和`combination`方法来实现排列和组合。
阅读全文