// https://leetcode.com/problems/subsets-ii/submissions/1909073945/ import java.util.*; class SubsetTwoAlternate { public static void printSubset(int currentIndex, List ds, int[] nums, int n, List> finalAnswer){ if (currentIndex == n){ finalAnswer.add(new ArrayList<>(ds)); return; } // Include ds.add(nums[currentIndex]); printSubset(currentIndex + 1, ds, nums, n, finalAnswer); ds.remove(ds.size() - 1); // Exclude int nextIndex = currentIndex + 1; while (nextIndex < n && nums[nextIndex] == nums[currentIndex]){ nextIndex++; } printSubset(nextIndex, ds, nums, n, finalAnswer); } public List> subsetsWithDup(int[] nums) { Arrays.sort(nums); int n = nums.length; List ds = new ArrayList(); List> finalAnswer = new ArrayList<>(); printSubset(0, ds, nums, n, finalAnswer); return finalAnswer; } } public class Main { public static void main(String[] args) { // Assumed Test Input int[] nums = {1, 2, 2}; Solution sol = new Solution(); List> result = sol.subsetsWithDup(nums); System.out.println("Subsets Without Duplicates:"); for (List subset : result) { System.out.println(subset); } } }