一、题目
二、代码
class Solution
{
//先去重最合适
List<List<Integer>> re_list = new LinkedList<>();
LinkedList<Integer> path = new LinkedList<>();
LinkedList<Integer> index = new LinkedList<>();
public void back(int[] nums)
{
// System.out.println("进入 ");
int i;
int length;
int last_num = Integer.MAX_VALUE;
length = nums.length;
// System.out.println("path.size() "+path.size());
if(path.size()==length)
{
re_list.add(new LinkedList<>(path));
return;
}
if(path.size()>length) return;
// System.out.println("length " + length);
for(i=0;i<length;i++)
{
// System.out.println("i "+i);
// System.out.println("nums[i] "+nums[i]);
// System.out.println("index.contains(i) "+index.contains(i));
if(nums[i]==last_num) continue;
if(index.contains(i)==false)
{
path.add(nums[i]);
last_num = nums[i];
index.add(i);
back(nums);
path.removeLast();
index.removeLast();
}
}
}
public List<List<Integer>> permuteUnique(int[] nums)
{
int i;
int length;
length = nums.length;
// for(i=0;i<length;i++)
// {
// System.out.println(" nums[i] "+nums[i]);
// }
Arrays.sort(nums);
back(nums);
return re_list;
}
}
三、运行结果
四、附录
二刷
class Solution
{
List<List<Integer>> re = new LinkedList<>();
List<Integer> path = new LinkedList<>();
Map<Integer,Integer> record = new HashMap<>();
public void track(int[] nums, int start)
{
int i;
int length = nums.length;
if(path.size()==length) re.add(new LinkedList<>(path));
List<Integer> have = new LinkedList<>();
for(i=0;i<length;i++)
{
//要保证同一层不重复 不要去remove
if(have.contains(nums[i]) == true) continue;
if(record.getOrDefault(nums[i],0) != 0)
{
path.add(nums[i]);
record.put( nums[i], record.get(nums[i])-1 );
have.add(nums[i]);
track(nums,0);
path.removeLast();
record.put( nums[i], record.get(nums[i])+1 );
}
}
}
public List<List<Integer>> permuteUnique(int[] nums)
{
//Arrays.sort(nums);
int i;
int length = nums.length;
for(i=0;i<length;i++) record.put(nums[i],record.getOrDefault(nums[i],0)+1);
track(nums,0);
return re;
}
}