java代码编写:n个数的全排列问题
时间: 2024-09-24 19:31:20 浏览: 67
在Java中,生成n个数的全排列问题通常会通过递归的方式来解决。这是一个经典的回溯算法例子,因为我们需要尝试所有可能的组合,同时需要撤销已经做出的选择以便探索其他路径。以下是一个简单的Java代码示例:
```java
import java.util.ArrayList;
public class Permutations {
public static void permute(int[] nums, int start, ArrayList<ArrayList<Integer>> res) {
if (start == nums.length) { // 如果遍历完成,添加当前排列到结果列表
res.add(new ArrayList<>(Arrays.asList(nums)));
} else {
for (int i = start; i < nums.length; i++) { // 对剩余元素进行循环,每次选择一个元素放到当前位置
swap(nums, start, i); // 交换元素位置
permute(nums, start + 1, res); // 递归处理下一层
swap(nums, start, i); // 撤销操作,恢复原始状态
}
}
}
private static void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
public static ArrayList<ArrayList<Integer>> getPermutations(int[] nums) {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
permute(nums, 0, result);
return result;
}
public static void main(String[] args) {
int[] nums = {1, 2, 3};
ArrayList<ArrayList<Integer>> permutations = getPermutations(nums);
for (ArrayList<Integer> permutation : permutations) {
System.out.println(permutation);
}
}
}
```
在这个代码里,`permute`函数实现了递归过程,而`getPermutations`则是用于获取全部排列并返回结果的入口点。
阅读全文