Java用回溯法写一个全排列代码
时间: 2024-01-27 09:03:19 浏览: 83
好的,下面是Java用回溯法写一个全排列的代码:
```java
public class Permutations {
public static void main(String[] args) {
int[] nums = {1, 2, 3};
permute(nums);
}
public static void permute(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
backtrack(res, new ArrayList<>(), nums);
System.out.println(res);
}
private static void backtrack(List<List<Integer>> res, List<Integer> tempList, int[] nums) {
if (tempList.size() == nums.length) {
res.add(new ArrayList<>(tempList));
} else {
for (int i = 0; i < nums.length; i++) {
if (tempList.contains(nums[i])) continue;
tempList.add(nums[i]);
backtrack(res, tempList, nums);
tempList.remove(tempList.size() - 1);
}
}
}
}
```
其中,`permute`方法是对外暴露的方法,`backtrack`方法是真正实现全排列的方法。使用一个`List<List<Integer>>`来保存全排列的结果,`tempList`用于保存当前排列。在`backtrack`方法中,首先判断`tempList`的大小是否已经等于`nums`的长度,如果是,就将当前排列加入到结果中。如果不是,就遍历`nums`数组,如果`tempList`中已经包含了当前数字,就跳过。否则,将当前数字加入到`tempList`中,递归调用`backtrack`方法,然后将当前数字从`tempList`中移除,进行下一次迭代。
阅读全文