int[] nums;
boolean[] seleectedArr;
HashSet<List<Integer>> list = new HashSet<List<Integer>>();
int[] tempArr;
public List<List<Integer>> permuteUnique(int[] nums) {
if (nums.length == 0)
return new ArrayList();
this.nums = nums;
seleectedArr = new boolean[nums.length];
tempArr = new int[nums.length];
dfs(0);
return new ArrayList(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;
}
}
class Solution {
int[] nums;
List<List<Integer>> list = new ArrayList<List<Integer>>();
public List<List<Integer>> permuteUnique(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++) {
int flag=0;
for(int j=i-1;j>=idx;j--){
if(nums[j]==nums[i]){
flag=1;
}
}
if(flag==0){
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;
}
}