给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
class Solution {
List<List<Integer>> list1 = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
generatepermute(nums,0,new ArrayList<Integer>(),initArray(nums));
return list1;
}
private void generatepermute(int nums[],int index,List<Integer> list2,boolean [] used){//外层递归控制递归结束条件
if(index==nums.length){
list1.add(new ArrayList<>(list2));
return;
}
for (int i = 0; i < nums.length; i++) {
if(!used[i]){//如果num[i]没有被使用,就添加至list2
list2.add(nums[i]);
System.out.println(list2.toString());
used[i]=true;
generatepermute(nums,index+1,list2,used);
list2.remove(list2.size()-1);
used[i]=false;
}
}
}
public boolean [] initArray(int nums[]){
boolean [] used = new boolean[nums.length];
for (int i = 0; i < nums.length; i++) {
used[i]=false;
}
return used;
}
public static void main(String[] args) {
//System.out.println(new Solution().permute(new int[]{1,2,3}));
new Solution().permute(new int[]{1,2,3});
}
}
回溯过程: