// Given a collection of integers that might contain duplicates, nums, return all possible subsets. // Note: The solution set must not contain duplicate subsets. // For example, // If nums = [1,2,2], a solution is: // [ // [2], // [1], // [1,2,2], // [2,2], // [1,2], // [] // ] public class SubsetsII { public List> subsetsWithDup(int[] nums) { Arrays.sort(nums); List> result = new ArrayList>(); if(nums.length == 0 || nums == null) { return result; } helper(nums, new ArrayList(), 0, result); return result; } public void helper(int[] nums, ArrayList current, int index, List> result) { result.add(current); for(int i = index; i < nums.length; i++) { if(i > index && nums[i] == nums[i - 1]) { continue; } ArrayList newCurrent = new ArrayList(current); newCurrent.add(nums[i]); helper(nums, newCurrent, i + 1, result); } } }