package LeetCode;
import java.util.ArrayList;
import java.util.List;
/*
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2]
输出:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
*/
public class HS_PermuteII {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
List<Integer> l = new ArrayList<>();
List<Integer> is = new ArrayList<>();
huisu(is,nums, l, result);
return result;
}
public void huisu(List<Integer> is ,int[] nums, List<Integer> l, List<List<Integer>> result) {
if (l.size() == nums.length&&!result.contains(l)) {
//指向新的一片地址空间使其变成不在跟随l改变而改变
result.add(new ArrayList<Integer>(l));
return;
} else {
for (int i = 0; i < nums.length; i++) {
if (is.contains(i))continue;
l.add(nums[i]);
is.add(i);
huisu(is,nums, l, result);
//退回一格
l.remove(l.size() - 1);
is.remove(is.size()-1);
}
}
}
}