Subsets II Visualizer & Step-by-Step Algorithm Solution

Generate all unique subsets from an integer array that may contain duplicates using sorting, duplicate skipping, and recursive backtracking.

Category: backtracking | Difficulty: Medium

Tags: Backtracking, Recursion, Array, Decision Tree, LeetCode 90

Subsets II

[]
Sorted Input Array
1
0
2
1
2
2
100%
state
curr[]
totalSubsets0
Sort Array
1/34
Explanation

Sort input array in ascending order: [1, 2, 2]. Sorting groups identical numbers together so duplicates can be skipped easily.

Source Code
1function subsetsWithDup(nums: number[]): number[][] {
2 nums.sort((a, b) => a - b);
3 const result: number[][] = [];
4 function backtrack(start: number, curr: number[]) {
5 result.push([...curr]);
6 for (let i = start; i < nums.length; i++) {
7 if (i > start && nums[i] === nums[i - 1]) continue;
8
9 curr.push(nums[i]);
10 backtrack(i + 1, curr);
11 curr.pop();
12 }
13 }
14 backtrack(0, []);
15 return result;
16}