Qiuziセット同じ要素が含まれています
For example,
If nums = [1,2,2], a solution is:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
件名の説明:
すべてのサブセットが繰り返されることはありません返す重複要素の集合の集合を、与えられました。
アイデアの分析:
バックトラックを解決するために、セットのサブセットを探しています。そこに重複した要素があるので、我々は最初のコレクションは、前回1と同じ要素かどうかを確認するために要素を追加するには、時間をソートされ、同じ前の要素がアクセスされていない場合ので、その後、スキップ。
コード:
class Solution {
public List<List<Integer>>subsetsWithDup(int []nums){
List<List<Integer>>res=new ArrayList<>();
List<Integer>list=new ArrayList<>();
if(nums==null||nums.length==0)
return res;
Arrays.sort(nums); //排序
boolean []visited=new boolean[nums.length];
for(int size=0;size<=nums.length;size++){
backtracking(0,size,nums,visited,res,list);
}
return res;
}
public void backtracking(int start,int size,int[]nums,boolean[]visited,List<List<Integer>>res,List<Integer>list){
if(list.size()==size){
res.add(new ArrayList<>(list));
return;
}
for(int i=start;i<nums.length;i++){
if(i!=0&&nums[i]==nums[i-1]&&!visited[i-1])
continue;
list.add(nums[i]);
visited[i]=true; //标记已经访问过
backtracking(i+1,size,nums,visited,res,list);
list.remove(list.size()-1);
visited[i]=false;
}
}
}