2. 递归求解全排列问题 给出一组数字,假设这组数字没有重复项,返回该组数字的所有全排列,例如:[1,2,3] 的所有排列如下[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2], [3,2,1]。(以数字在数组中的位置靠前为优 先级,按字典序排列输出。
时间: 2023-10-16 15:19:10 浏览: 77
这是一个算法问题,可以使用递归实现,以下是 Java 实现代码:
```
import java.util.*;
public class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
backtrack(res, nums, new ArrayList<>());
return res;
}
private void backtrack(List<List<Integer>> res, int[] nums, List<Integer> temp) {
if (temp.size() == nums.length) {
res.add(new ArrayList<>(temp));
return;
}
for (int i = 0; i < nums.length; i++) {
if (temp.contains(nums[i]))
continue;
temp.add(nums[i]);
backtrack(res, nums, temp);
temp.remove(temp.size() - 1);
}
}
}
```
它使用了回溯算法,利用一个列表来记录已经选取的数字,如果这个列表中已经包含了所有数字,就将它加入到结果列表中,否则遍历所有数字,如果这个数字没有被选取过就加入到列表中,并继续向下递归,递归完成后要将这个数字从列表中移除,以便下一轮的遍历。最后按字典序排列输出即可。
阅读全文