Backtracking строит потенциальные решения пошагово и отказывает от частичного кандидата, как только он не может привести к допустимому решению. Он систематически исследует пространство решений через DFS, отсекая тупики.
Идея
Выбери -> исследуй -> отмени выбор. Попробуй вариант, рекурсия; если не сработает, откатись и пробуй следующий.
Пример: все перестановки
():
result = []
():
remaining:
result.append(path[:])
i ((remaining)):
path.append(remaining[i])
backtrack(path, remaining[:i] + remaining[i+:])
path.pop()
backtrack([], nums)
result
permutations([, , ])
