Subsets II
Given a list of numbers that may has duplicate numbers, return all possible subsets
Example
If S = [1,2,2], a solution is:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
Note
- 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.
Challenge
Can you do it in both recursively and iteratively?
public class Solution { public ArrayList<ArrayList<Integer>> subsetsWithDup(ArrayList<Integer> S) { ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> list = new ArrayList<Integer>(); if (S == null || S.size() == 0) { return result; } Collections.sort(S); subsetsHelper(result, list, S, 0); return result; } private void subsetsHelper(ArrayList<ArrayList<Integer>> result, ArrayList<Integer> list, ArrayList<Integer> S, int pos) { result.add(new ArrayList<Integer>(list)); for (int i = pos; i < S.size(); i++) { if (i != pos && S.get(i) == S.get(i - 1)) { continue; } list.add(S.get(i)); subsetsHelper(result, list, S, i + 1); list.remove(list.size() - 1); } } }

浙公网安备 33010602011771号