Backtracking & Exhaustive Search

Advanced & DP

Combinations, permutations, and constraint satisfaction through pruned search trees

115 problems·3 Easy·77 Medium·35 Hard
Pattern Study Guide & Cheat Sheet
▼

Explore all combinatorial possibilities through depth-first recursion, systematically making a choice, exploring its consequences, and pruning or undoing the choice (backtracking).

Core Invariant: DFS on a Decision Tree: at each node: 1) Check base case; 2) Iterate over choices; 3) Prune invalid choices early; 4) Make choice; 5) Recurse; 6) Undo choice (restore state).

Recognize it (Keywords & Signals)
  • Generate all permutations, combinations, or subsets
  • Find all valid configurations (N-Queens, Sudoku)
  • Word search in a 2D grid
  • Generate parentheses
  • Partition array into equal sum subsets
When NOT to use

Only the optimal value (count, min, max) is needed, not the actual paths/subsets (usually DP instead of backtracking!).

How to solve (Step-by-step)
  1. 1.Define `backtrack(start_idx, current_path)`.
  2. 2.Base case: if `current_path` meets length or target, add a deep copy `ans.append(list(current_path))` and return.
  3. 3.Loop through candidate elements from `start_idx` to `n`.
  4. 4.Pruning: skip if candidate exceeds remaining budget or is duplicate: `if i > start_idx and nums[i] == nums[i-1]: continue`.
  5. 5.Choose: `current_path.append(nums[i])`.
  6. 6.Recurse: `backtrack(i + 1, current_path)`.
  7. 7.Unchoose: `current_path.pop()`.
Watch for (Interview Traps)
  • Appending `path` instead of `path.copy()` or `list(path)` (results in empty arrays after unchoose pops)
  • Forgetting to sort before skipping duplicates (`nums[i] == nums[i-1]`)
  • Incorrect recursion index: `backtrack(start + 1)` instead of `backtrack(i + 1)` in recursive call
Combinations / Subsets with Pruning
def subsets_with_dup(nums: list[int]) -> list[list[int]]:
    nums.sort()  # Sorting is mandatory to group duplicates for pruning
    result = []
    
    def backtrack(start: int, path: list[int]) -> None:
        # Every node in the decision tree is a valid subset
        result.append(list(path))  # Important: copy current path!
        
        for i in range(start, len(nums)):
            # Prune duplicate branches at the same tree level
            if i > start and nums[i] == nums[i - 1]:
                continue
                
            path.append(nums[i])        # Make choice
            backtrack(i + 1, path)      # Explore choice (i + 1 prevents reuse)
            path.pop()                  # Undo choice (backtrack)
            
    backtrack(0, [])
    return result
Cost
O(2^n) subsets, O(n!) permutations · O(n) recursion call stack depth (Pruning invalid branches early is crucial for passing time limits.)
Canonical problems
#78 Subsets: Explore 2^n include/exclude decision tree
#46 Permutations: Explore all n! orderings using visited set
#39 Combination Sum: Allow reuse of same element with target reduction
#51 N-Queens: Prune attacks along cols, positive diagonals, negative diagonals
Medium·44 companies·Max freq 100%·Acc 78.9%
Shift TechnologyTexas InstrumentsZenefits+41
Medium·42 companies·Max freq 100%·Acc 47.7%
FaireKaratUber+39
Medium·40 companies·Max freq 100%·Acc 66.4%
DropboxTrexquantEpic Systems+37
Medium·31 companies·Max freq 100%·Acc 76.8%
Juniper NetworksPureHPE+28
Medium·29 companies·Max freq 92%·Acc 82.1%
WorkdayNeetCode 150NeetCode 150+26
Medium·25 companies·Max freq 100%·Acc 0.8%
CoupangFiverrPornhub+22
Hard·25 companies·Max freq 90%·Acc 38.6%
SnowflakeCiscoTwo Sigma+22
Medium·21 companies·Max freq 97%·Acc 56.4%
Arista NetworksNvidiaAdobe+18
Hard·19 companies·Max freq 100%·Acc 65.6%
ConfluentSnapSnap+16
Medium·19 companies·Max freq 100%·Acc 59.7%
RakutenSnapSnap+16
Hard·19 companies·Max freq 100%·Acc 0.6%
XDropboxX+16
Hard·18 companies·Max freq 94%·Acc 76.0%
MastercardNeetCode 150NeetCode 150+15
Hard·16 companies·Max freq 100%·Acc 27.8%
YelpOktaLyft+13
Hard·14 companies·Max freq 100%·Acc 50.5%
PinterestZScalerVirtu Financial+11
Medium·14 companies·Max freq 100%·Acc 74.3%
scalerNeetCode 150NeetCode 150+11
Medium·11 companies·Max freq 79%·Acc 61.6%
NeetCode 150NeetCode 150UiPath+8
Medium·11 companies·Max freq 63%·Acc 0.6%
Arista NetworksPalo Alto NetworksFlipkart+8
Hard·10 companies·Max freq 100%·Acc 37.4%
scalermyKaarmaZeta Global+7
Hard·10 companies·Max freq 100%·Acc 79.0%
LiftoffZenefitsDeutsche Bank+7
Medium·9 companies·Max freq 100%·Acc 42.1%
RackspaceeBayPhonePe+6
Medium·9 companies·Max freq 50%·Acc 63.7%
LinkedInTikTokMicrosoft+6
Easy·8 companies·Max freq 89%·Acc 69.0%
RevolutCapital OneApple+5
Medium·8 companies·Max freq 88%·Acc 0.6%
SnapSnapGoogle+5
Medium·8 companies·Max freq 75%·Acc 38.8%
LinkedInZeta GlobalAmazon+5
Medium·8 companies·Max freq 50%·Acc 74.8%
TikTokMetaInfosys+5
Medium·7 companies·Max freq 100%·Acc 45.9%
GuidewireGeicoAmerican Express+4
Medium·7 companies·Max freq 100%·Acc 75.9%
YelpTikTokMeta+4
Hard·7 companies·Max freq 90%·Acc 43.4%
PinterestMetaGoogle+4
Hard·7 companies·Max freq 87%·Acc 59.6%
RokuUberGoogle+4
Hard·7 companies·Max freq 76%·Acc 74.5%
AirbnbNvidiaUber+4
Hard·7 companies·Max freq 67%·Acc 78.0%
WaymoMetaLinkedIn+4
Medium·7 companies·Max freq 66%·Acc 0.7%
VisaHashedInRippling+4
Medium·7 companies·Max freq 65%·Acc 89.5%
BNY MellonCitadelGoogle+4
Hard·7 companies·Max freq 54%·Acc 82.9%
DatabricksAmazonMeta+4
Medium·6 companies·Max freq 100%·Acc 49.0%
DropboxUberTikTok+3
Medium·6 companies·Max freq 96%·Acc 52.6%
MathWorksCoupangAirbnb+3
Medium·6 companies·Max freq 90%·Acc 66.9%
NianticStripeAnduril+3
Medium·6 companies·Max freq 42%·Acc 56.0%
ZohoMicrosoftGoogle+3
Medium·5 companies·Max freq 90%·Acc 63.1%
SprinklrBloombergGoogle+2
Hard·5 companies·Max freq 88%·Acc 14.9%
AccentureGoogleMicrosoft+2
Medium·5 companies·Max freq 77%·Acc 59.3%
FlipkartTekionGoogle+2
Medium·5 companies·Max freq 63%·Acc 83.7%
BloombergNetflixAmazon+2
Medium·5 companies·Max freq 59%·Acc 88.5%
PaytmAmazonMicrosoft+2
Hard·5 companies·Max freq 57%·Acc 46.0%
PinterestAmazonMicrosoft+2
Easy·5 companies·Max freq 55%·Acc 90.1%
AdobeAmazonMicrosoft+2
Medium·5 companies·Max freq 41%·Acc 68.5%
SalesforceGoldman SachsGoogle+2
Medium·5 companies·Max freq 38%·Acc 65.3%
IBMAmazonBloomberg+2
Medium·5 companies·Max freq 38%·Acc 83.5%
BloombergOracleGoogle+2
Medium·5 companies·Max freq 38%·Acc 87.1%
MicrosoftGoogleBloomberg+2
Medium·5 companies·Max freq 31%·Acc 62.8%
MetaAmazonGoogle+2
50 displayed (of 50 matching)Filtered: All Companies

Top Companies Testing Backtracking & Exhaustive Search

Browse company-specific interview problem lists and recency breakdowns:

Explore All 22 DSA Coding Patterns

Master core algorithmic patterns tested in FAANG & Big Tech coding interviews.

Patterns Hub

Backtracking & Exhaustive Search frequently asked questions

What is the Backtracking & Exhaustive Search pattern in coding interviews?

Combinations, permutations, and constraint satisfaction through pruned search trees It is categorized under Advanced & DP and features 115 curated interview problems across Easy (3), Medium (77), and Hard (35) difficulties.

Which tech companies frequently test Backtracking & Exhaustive Search?

Companies frequently asking Backtracking & Exhaustive Search questions include Google, Amazon, Microsoft, Meta, Bloomberg, TikTok.

How do I master the Backtracking & Exhaustive Search pattern?

Start by studying the algorithmic strategy and template code, then practice Easy and Medium problems before attempting Hard problems under timed conditions.