Given a collection of integers that might contain duplicates, S, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If S =
If S =
[1,2,2], a solution is:[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
Solution:
public class Solution {
public List<List<Integer>> subsetsWithDup(int[] num) {
Arrays.sort(num);
List<List<Integer>> solution = new ArrayList<List<Integer>>();
subsetsWithDup(num, 0, new ArrayList<Integer>(), solution);
return solution;
}
public void subsetsWithDup(int[] num, int index, ArrayList<Integer> tempSolution, List<List<Integer>> solution) {
if(index == num.length)
{
solution.add((List<Integer>)tempSolution.clone());
return;
}
//Do not add element num[i]
int value = num[index];
int i= index;
while(i<num.length && num[i]==value)
i++;
subsetsWithDup(num, i, tempSolution, solution);
//Add element num[i]
tempSolution.add(num[index]);
subsetsWithDup(num, index+1, tempSolution, solution);
tempSolution.remove(tempSolution.size()-1);
}
}
No comments :
Post a Comment