← All patterns
Backtracking

Subsets

156 practice questions|Medium

When to use it

Generate all possible subset combinations by making binary include/exclude decisions.

Key Signals & Indicators

  • Need to evaluate all possible groupings (combinations/power set)
  • Ordering does not matter in output sets
  • Small input sizes (usually n <= 20) allowing O(2^n) complexity

Pattern Boilerplate

c++
// C++ Backtracking Subsets Template
#include <vector>

void backtrack(int start, const std::vector<int>& nums, std::vector<int>& current, std::vector<std::vector<int>>& subsets) {
    subsets.push_back(current); // Process state
    
    for (size_t i = start; i < nums.size(); ++i) {
        current.push_back(nums[i]); // Choose
        backtrack(i + 1, nums, current, subsets); // Recurse
        current.pop_back(); // Backtrack / Undo
    }
}

std::vector<std::vector<int>> getSubsets(const std::vector<int>& nums) {
    std::vector<std::vector<int>> subsets;
    std::vector<int> current;
    backtrack(0, nums, current, subsets);
    return subsets;
}

Problems using this pattern

124 GameHard
ArrayMathBacktracking
Solve →
2Add Two NumbersMedium
Linked ListMathRecursion
Solve →
3Additive NumberMedium
StringBacktracking
Solve →
4All Paths From Source to TargetMedium
BacktrackingDepth-First SearchBreadth-First Search
Solve →
5All Possible Full Binary TreesMedium
Dynamic ProgrammingTreeRecursion
Solve →
6Ambiguous CoordinatesMedium
StringBacktrackingEnumeration
Solve →
7Android Unlock PatternsMedium
Dynamic ProgrammingBacktrackingBit Manipulation
Solve →
8Balanced K-Factor DecompositionMedium
MathBacktrackingNumber Theory
Solve →
9Basic Calculator IIIHard
MathStringStack
Solve →
10Basic Calculator IVHard
Hash TableMathString
Solve →
11Basic CalculatorHard
MathStringStack
Solve →
12Beautiful ArrangementMedium
ArrayDynamic ProgrammingBacktracking
Solve →
13Binary Tree PathsEasy
StringBacktrackingTree
Solve →
14Binary WatchEasy
BacktrackingBit Manipulation
Solve →
15Brace Expansion IIHard
Hash TableStringBacktracking
Solve →
16Brace ExpansionMedium
StringBacktrackingStack
Solve →
17Campus Bikes IIMedium
ArrayDynamic ProgrammingBacktracking
Solve →
18Circular Permutation in Binary RepresentationMedium
MathBacktrackingBit Manipulation
Solve →
19Closest Dessert CostMedium
ArrayDynamic ProgrammingBacktracking
Solve →
20Combination Sum IIMedium
ArrayBacktracking
Solve →
21Combination Sum IIIMedium
ArrayBacktracking
Solve →
22Combination SumMedium
ArrayBacktracking
Solve →
23CombinationsMedium
Backtracking
Solve →
24Confusing Number IIHard
MathBacktracking
Solve →
25Construct Smallest Number From DI StringMedium
StringBacktrackingStack
Solve →
26Construct the Lexicographically Largest Valid SequenceMedium
ArrayBacktracking
Solve →
27Count Collisions of Monkeys on a PolygonMedium
MathRecursion
Solve →
28Count Good NumbersMedium
MathRecursion
Solve →
29Count Number of Maximum Bitwise-OR SubsetsMedium
ArrayBacktrackingBit Manipulation
Solve →
30Count Numbers with Unique DigitsMedium
MathDynamic ProgrammingBacktracking
Solve →
31Decode StringMedium
StringStackRecursion
Solve →
32Different Ways to Add ParenthesesMedium
MathStringDynamic Programming
Solve →
33Distribute Repeating IntegersHard
ArrayHash TableDynamic Programming
Solve →
34Elimination GameMedium
MathRecursion
Solve →
35Expression Add OperatorsHard
MathStringBacktracking
Solve →
36Factor CombinationsMedium
Backtracking
Solve →
37Fair Distribution of CookiesMedium
ArrayDynamic ProgrammingBacktracking
Solve →
38Fibonacci NumberEasy
MathDynamic ProgrammingRecursion
Solve →
39Find Kth Bit in Nth Binary StringMedium
StringRecursionSimulation
Solve →
40Find Minimum Time to Finish All JobsHard
ArrayDynamic ProgrammingBacktracking
Solve →
41Find the K-th Character in String Game IEasy
MathBit ManipulationRecursion
Solve →
42Find the K-th Character in String Game IIHard
MathBit ManipulationRecursion
Solve →
43Find the Punishment Number of an IntegerMedium
MathBacktracking
Solve →
44Find the Winner of the Circular GameMedium
ArrayMathRecursion
Solve →
45Find Unique Binary StringMedium
ArrayHash TableString
Solve →
46Finding 3-Digit Even NumbersEasy
ArrayHash TableRecursion
Solve →
47Flip Game IIMedium
MathDynamic ProgrammingBacktracking
Solve →
48Generalized AbbreviationMedium
StringBacktrackingBit Manipulation
Solve →
49Generate Binary Strings Without Adjacent ZerosMedium
StringBacktrackingBit Manipulation
Solve →
50Generate ParenthesesMedium
StringDynamic ProgrammingBacktracking
Solve →
51Gray CodeMedium
MathBacktrackingBit Manipulation
Solve →
52Integer to English WordsHard
MathStringRecursion
Solve →
53Iterator for CombinationMedium
StringBacktrackingDesign
Solve →
54K-th Symbol in GrammarMedium
MathBit ManipulationRecursion
Solve →
55Largest Time for Given DigitsMedium
ArrayStringBacktracking
Solve →
56Letter Case PermutationMedium
StringBacktrackingBit Manipulation
Solve →
57Letter Combinations of a Phone NumberMedium
Hash TableStringBacktracking
Solve →
58Letter Tile PossibilitiesMedium
Hash TableStringBacktracking
Solve →
59Longest Subsequence Repeated k TimesHard
Hash TableTwo PointersString
Solve →
60Matchsticks to SquareMedium
ArrayDynamic ProgrammingBacktracking
Solve →
61Maximize Number of Nice DivisorsHard
MathRecursionNumber Theory
Solve →
62Maximize Score After N OperationsHard
ArrayMathDynamic Programming
Solve →
63Maximum Compatibility Score SumMedium
ArrayDynamic ProgrammingBacktracking
Solve →
64Maximum Good People Based on StatementsHard
ArrayBacktrackingBit Manipulation
Solve →
65Maximum Length of a Concatenated String with Unique CharactersMedium
ArrayStringBacktracking
Solve →
66Maximum Number of Achievable Transfer RequestsHard
ArrayBacktrackingBit Manipulation
Solve →
67Maximum Path Quality of a GraphHard
ArrayBacktrackingGraph Theory
Solve →
68Maximum Points in an Archery CompetitionMedium
ArrayBacktrackingBit Manipulation
Solve →
69Maximum Product of the Length of Two Palindromic SubsequencesMedium
StringDynamic ProgrammingBacktracking
Solve →
70Maximum Rows Covered by ColumnsMedium
ArrayBacktrackingBit Manipulation
Solve →
71Maximum Score Words Formed by LettersHard
ArrayHash TableString
Solve →
72Maximum Split of Positive Even IntegersMedium
MathBacktrackingGreedy
Solve →
73Merge Two Sorted ListsEasy
Linked ListRecursion
Solve →
74Minimum Moves to Spread Stones Over GridMedium
ArrayDynamic ProgrammingBacktracking
Solve →
75Minimum Non-Zero Product of the Array ElementsMedium
MathGreedyRecursion
Solve →
76Minimum Number of Lines to Cover PointsMedium
ArrayHash TableMath
Solve →
77Minimum Number of Work Sessions to Finish the TasksMedium
ArrayDynamic ProgrammingBacktracking
Solve →
78Minimum One Bit Operations to Make Integers ZeroHard
MathDynamic ProgrammingBit Manipulation
Solve →
79Minimum Time to Break Locks IMedium
ArrayDynamic ProgrammingBacktracking
Solve →
80Minimum Unique Word AbbreviationHard
ArrayStringBacktracking
Solve →
81N-Queens IIHard
Backtracking
Solve →
82N-QueensHard
ArrayBacktracking
Solve →
83Next Closest TimeMedium
Hash TableStringBacktracking
Solve →
84Next Greater Numerically Balanced NumberMedium
Hash TableMathBacktracking
Solve →
85Next Special Palindrome NumberHard
BacktrackingBit Manipulation
Solve →
86Non-decreasing SubsequencesMedium
ArrayHash TableBacktracking
Solve →
87Number of Digit OneHard
MathDynamic ProgrammingRecursion
Solve →
88Number of Self-Divisible PermutationsMedium
ArrayMathDynamic Programming
Solve →
89Number of Squareful ArraysHard
ArrayHash TableMath
Solve →
90Number of Valid Move Combinations On ChessboardHard
ArrayStringBacktracking
Solve →
91Numbers With Same Consecutive DifferencesMedium
BacktrackingBreadth-First Search
Solve →
92Optimal Account BalancingHard
ArrayDynamic ProgrammingBacktracking
Solve →
93Output Contest MatchesMedium
StringRecursionSimulation
Solve →
94Palindrome Linked ListEasy
Linked ListTwo PointersStack
Solve →
95Palindrome PartitioningMedium
StringDynamic ProgrammingBacktracking
Solve →
96Palindrome Permutation IIMedium
Hash TableStringBacktracking
Solve →
97Parse Lisp ExpressionHard
Hash TableStringStack
Solve →
98Parsing A Boolean ExpressionHard
StringStackRecursion
Solve →
99Partition Array into Two Equal Product SubsetsMedium
ArrayBit ManipulationRecursion
Solve →
100Partition to K Equal Sum SubsetsMedium
ArrayDynamic ProgrammingBacktracking
Solve →
101Path Sum IIMedium
BacktrackingTreeDepth-First Search
Solve →
102Path with Maximum GoldMedium
ArrayBacktrackingMatrix
Solve →
103Permutation SequenceHard
MathRecursion
Solve →
104Permutations IIMedium
ArrayBacktrackingSorting
Solve →
105Permutations IIIMedium
ArrayBacktracking
Solve →
106PermutationsMedium
ArrayBacktracking
Solve →
107Power of FourEasy
MathBit ManipulationRecursion
Solve →
108Power of ThreeEasy
MathRecursion
Solve →
109Power of TwoEasy
MathBit ManipulationRecursion
Solve →
110Pow(x, n)Medium
MathRecursion
Solve →
111Predict the WinnerMedium
ArrayMathDynamic Programming
Solve →
112Pyramid Transition MatrixMedium
Hash TableStringBacktracking
Solve →
113Regular Expression MatchingHard
StringDynamic ProgrammingRecursion
Solve →
114Remove Invalid ParenthesesHard
StringBacktrackingBreadth-First Search
Solve →
115Remove Linked List ElementsEasy
Linked ListRecursion
Solve →
116Remove Nodes From Linked ListMedium
Linked ListStackRecursion
Solve →
117Reorder ListMedium
Linked ListTwo PointersStack
Solve →
118Restore IP AddressesMedium
StringBacktracking
Solve →
119Reverse Linked ListEasy
Linked ListRecursion
Solve →
120Reverse Nodes in k-GroupHard
Linked ListRecursion
Solve →
121Robot Room CleanerHard
BacktrackingInteractive
Solve →
122Shopping OffersMedium
ArrayDynamic ProgrammingBacktracking
Solve →
123Sliding PuzzleHard
ArrayDynamic ProgrammingBacktracking
Solve →
124Smallest Divisible Digit Product IIHard
MathStringBacktracking
Solve →
125Smallest String Starting From LeafMedium
StringBacktrackingTree
Solve →
126Split a String Into the Max Number of Unique SubstringsMedium
Hash TableStringBacktracking
Solve →
127Split Array into Fibonacci SequenceMedium
StringBacktracking
Solve →
128Split BSTMedium
TreeBinary Search TreeRecursion
Solve →
129Stepping NumbersMedium
MathBacktrackingBreadth-First Search
Solve →
130Stickers to Spell WordHard
ArrayHash TableString
Solve →
131Strobogrammatic Number IIMedium
ArrayStringRecursion
Solve →
132Subsets IIMedium
ArrayBacktrackingBit Manipulation
Solve →
133SubsetsMedium
ArrayBacktrackingBit Manipulation
Solve →
134Sudoku SolverHard
ArrayHash TableBacktracking
Solve →
135Sum of All Subset XOR TotalsEasy
ArrayMathBacktracking
Solve →
136Swap Nodes in PairsMedium
Linked ListRecursion
Solve →
137Synonymous SentencesMedium
ArrayHash TableString
Solve →
138Target SumMedium
ArrayDynamic ProgrammingBacktracking
Solve →
139Ternary Expression ParserMedium
StringStackRecursion
Solve →
140The k-th Lexicographical String of All Happy Strings of Length nMedium
StringBacktracking
Solve →
141The Knight’s TourMedium
ArrayBacktrackingMatrix
Solve →
142The Number of Beautiful SubsetsMedium
ArrayHash TableMath
Solve →
143Tiling a Rectangle with the Fewest SquaresHard
Backtracking
Solve →
144Unique 3-Digit Even NumbersEasy
ArrayHash TableRecursion
Solve →
145Unique Binary Search Trees IIMedium
Dynamic ProgrammingBacktrackingTree
Solve →
146Unique Paths IIIHard
ArrayBacktrackingBit Manipulation
Solve →
147Verbal Arithmetic PuzzleHard
ArrayMathString
Solve →
148Verify Preorder Sequence in Binary Search TreeMedium
ArrayStackTree
Solve →
149Wildcard MatchingHard
StringDynamic ProgrammingGreedy
Solve →
150Word Break IIHard
ArrayHash TableString
Solve →
151Word Ladder IIHard
Hash TableStringBacktracking
Solve →
152Word Pattern IIMedium
Hash TableStringBacktracking
Solve →
153Word Search IIHard
ArrayStringBacktracking
Solve →
154Word SearchMedium
ArrayStringBacktracking
Solve →
155Word Squares IIMedium
ArrayStringBacktracking
Solve →
156Word SquaresHard
ArrayStringBacktracking
Solve →