int[] nums;
boolean[] seleectedArr;
List<List<Integer>> list=new ArrayList<List<Integer>>();
int[] tempArr;
public List<List<Integer>> permute(int[] nums) {
if(nums.length==0) return list;
this.nums=nums;
seleectedArr=new boolean[nums.length];
tempArr=new int[nums.length];
dfs(0);
return list;
}
private void dfs(int idx) {
if(idx==nums.length) {
List<Integer> lll=new ArrayList<Integer>();
for (int i = 0; i < tempArr.length; i++) {
lll.add(tempArr[i]);
}
list.add(lll);
return ;
}
for(int i=0;i<nums.length;i++) {
if(seleectedArr[i]) continue;
seleectedArr[i]=true;
tempArr[idx]=nums[i];
dfs(idx+1);
seleectedArr[i]=false;;
}
}
int[] nums;
List<List<Integer>> list = new ArrayList<List<Integer>>();
public List<List<Integer>> permute(int[] nums) {
if (nums.length == 0)
return list;
this.nums = nums;
dfs(0);
return list;
}
private void dfs(int idx) {
if (idx == nums.length) {
List<Integer> lll = new ArrayList<Integer>();
for (int i = 0; i < nums.length; i++) {
lll.add(nums[i]);
}
list.add(lll);
return;
}
for (int i = idx; i < nums.length; i++) {
swap(idx, i);
dfs(idx + 1);
swap(idx, i);
}
}
private void swap(int i, int j) {
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
}