题目描述
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例1:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路
1.这道题可以使用回溯算法求解。
2.首先我们可以模拟人在写全排列的时候,是将排列中的一个数字取出来作为第一个数字固定好,然后将第二个到最后一个元素进行排列组合。
3.我们可以按照这个思路,每次从数组中选出一个元素,并记录其索引,如果该索引达到最大值,说明已经是一个排列好的组合,将其放入结果集后,进行回溯操作。
递归树
Java代码实现
public List<List<Integer>> permute(int[] nums) {
List<Integer> cur = new ArrayList<>();
List<List<Integer>> res = new ArrayList<>();
if(nums.length == 0)
return res;
for (int i = 0; i < nums.length; i++) {
cur.add(nums[i]);
}
permute(cur,res,0,nums.length);
return res;
}
public void permute(List<Integer> cur,List<List<Integer>> res,int index,int size) {
if(index == size){
res.add(new ArrayList<>(cur));
return ;
}
for (int i = index; i < size; i++) {
Collections.swap(cur,index,i);
permute(cur,res,index+1,size);
Collections.swap(cur,index,i);
}
}