var subsetsWithDup = function(nums) { let res = []; nums.sort((a, b) => a - b); // Sort nums to handle duplicates function subsets(index, curr) { if (index === nums.length) { res.push([...curr]); // Make a copy of curr to store in res return; } // Include the current number curr.push(nums[index]); subsets(index + 1, curr); curr.pop(); // Exclude the current number and skip all duplicates while (index < nums.length - 1 && nums[index] === nums[index + 1]) { index++; } subsets(index + 1, curr); } subsets(0, []); return res; };