题目:
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2]
输出:[[1,1,2],[1,2,1],[2,1,1]]
代码:
public class Test16 {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
function(nums,result,0);
return result;
}
public void function(int[]nums,List<List<Integer>> result,int index){
if (index==nums.length-1) {
List<Integer> temp = new ArrayList<>();
for (int num : nums) {
temp.add(num);
}
if (!result.contains(temp)) {
result.add(temp);
}
return;
}
function(nums,result,index+1);
for (int i = index+1; i <nums.length ; i++) {
if (nums[i]==nums[index]) {
continue;
}
int[] copy = Arrays.copyOf(nums, nums.length);
int temp = copy[index];
copy[index]=copy[i];
copy[i] = temp;
function(copy,result,index+1);
}
}
}