Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
[1,1,2] have the following unique permutations:
[1,1,2], [1,2,1], and [2,1,1].
Subscribe to see which companies asked this question
dfs算法
public class Solution {
private void dfs (List<List<Integer>> ret, List <Integer> tem,int [] nums,int [] check,int numLeft){
if(numLeft==0)ret.add(new ArrayList<Integer>(tem));
int c = 0;
for(int i = 0;i<nums.length;i++){
if(check[i]==1)continue;
c=nums[i]-1;
break;
}
for(int i = 0;i<nums.length;i++){
if(check[i]==1)continue;
if(c==nums[i])continue;
tem.add(nums[i]);
check[i]=1;
dfs(ret,tem,nums,check,numLeft-1);
tem.remove(tem.size()-1);
check[i]=0;
c=nums[i];
}
}
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> ret = new ArrayList <>();
List <Integer> tem = new ArrayList<>();
Arrays.sort(nums);
int [] check =new int [nums.length];
dfs(ret,tem,nums,check,nums.length);
return ret;
}
}
本文介绍了一种使用深度优先搜索(DFS)算法来生成包含重复元素的数组的所有唯一排列的方法。通过一个具体的例子展示了如何实现这一过程,即对于输入数组[1,1,2],输出所有不重复的排列组合。

1293

被折叠的 条评论
为什么被折叠?



