LeetCode 40: Combination Sum Ii — Step-by-Step Visual Trace
Medium — Backtracking | Array | Recursion | Combinatorics
The Problem
Find all unique combinations from a given array of candidates where each number can be used only once and the sum equals the target value.
Approach
Uses backtracking with duplicate handling by sorting the input array first, then skipping duplicate elements at the same recursion depth level. The algorithm explores all valid combinations by recursively adding candidates and backtracking when needed.
Time: O(2^n) · Space: O(target)
Code
class Solution:
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
def backtrack(start, target, combination):
if target == 0:
result.append(
combination[:]
) # Append a copy of the current combination
return
for i in range(start, len(candidates)):
if i > start and candidates[i] == candidates[i - 1]:
continue # Skip duplicates at the same depth level
if candidates[i] > target:
continue # Skip if the candidate is too large
combination.append(candidates[i])
backtrack(i + 1, target - candidates[i], combination)
combination.pop() # Backtrack
candidates.sort() # Sort the input to handle duplicates
result = []
backtrack(0, target, [])
return result
Watch It Run
Try it yourself: Open TraceLit and step through every line.
Built with TraceLit — the visual algorithm tracer for LeetCode practice.
Comments