90.Subsets II (M)
https://leetcode.com/problems/subsets-ii/
1.Description(Medium)
Given a list of numbers that may has duplicate numbers, return all possible subsets
Notice
Each element in a subset must be in _non-descending _order.
The ordering between two subsets is free.
The solution set must not contain duplicate subsets.
Example
If S =[1,2,2]
, a solution is:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
2.Code
与subset 相比,区别只在于去重。对于当前字符,如果下一个字符与之相等,则过滤掉。与combination sum I II 的区别相同。
public ArrayList<ArrayList<Integer>> subsetsWithDup(ArrayList<Integer> S){
ArrayList<ArrayList<Integer>> result=new ArrayList<>();
if(S==null || S.size()==0){
return result;
}
ArrayList<Integer> path=new ArrayList<Integer>();
Collections.sort(S);
dfs(S,0,path,result);
return result;
}
public void dfs(ArrayList<Integer> S,int startindex,ArrayList<Integer> path,ArrayList<ArrayList<Integer>> result){
result.add(new ArrayList<Integer>(path));
for(int i=startindex;i<S.size();i++){
if(i!=startindex && S.get(i)==S.get(i-1)){
continue;
}
path.add(S.get(i));
dfs(S,i+1,path,result);
path.remove(path.size()-1);
}
}
Last updated
Was this helpful?