> ## Documentation Index
> Fetch the complete documentation index at: https://leetcode-py.wisl.dev/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> leetcode-py is a Python LeetCode practice environment generator with one CLI: lcpy. It is not a service or platform.
> Each problem is a directory under leetcode/ with README.md, solution.py, test_solution.py, helpers.py, and playground.ipynb. lcpy gen creates them from JSON templates bundled with the package.
> Examples are backed by tests; copy them verbatim.

# Backtracking in Python with Tests

> All 78 Backtracking LeetCode problems with tested Python solutions.

Backtracking holds 78 problems (3 Easy, 56 Medium, 19 Hard).
Generate any of them into the current directory with `lcpy gen -n <number>`.

| # | Problem | Difficulty | Solution |
| - | - | - | - |
| 17 | [Letter Combinations of a Phone Number](https://leetcode-py.wisl.dev/problems/letter-combinations-of-a-phone-number) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/letter_combinations_of_a_phone_number/solution.py) |
| 22 | [Generate Parentheses](https://leetcode-py.wisl.dev/problems/generate-parentheses) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/generate_parentheses/solution.py) |
| 37 | [Sudoku Solver](https://leetcode-py.wisl.dev/problems/sudoku-solver) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/sudoku_solver/solution.py) |
| 39 | [Combination Sum](https://leetcode-py.wisl.dev/problems/combination-sum) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/combination_sum/solution.py) |
| 40 | [Combination Sum II](https://leetcode-py.wisl.dev/problems/combination-sum-ii) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/combination_sum_ii/solution.py) |
| 46 | [Permutations](https://leetcode-py.wisl.dev/problems/permutations) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/permutations/solution.py) |
| 47 | [Permutations II](https://leetcode-py.wisl.dev/problems/permutations-ii) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/permutations_ii/solution.py) |
| 51 | [N-Queens](https://leetcode-py.wisl.dev/problems/n-queens) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/n_queens/solution.py) |
| 52 | [N-Queens II](https://leetcode-py.wisl.dev/problems/n-queens-ii) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/n_queens_ii/solution.py) |
| 77 | [Combinations](https://leetcode-py.wisl.dev/problems/combinations) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/combinations/solution.py) |
| 78 | [Subsets](https://leetcode-py.wisl.dev/problems/subsets) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/subsets/solution.py) |
| 79 | [Word Search](https://leetcode-py.wisl.dev/problems/word-search) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/word_search/solution.py) |
| 89 | [Gray Code](https://leetcode-py.wisl.dev/problems/gray-code) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/gray_code/solution.py) |
| 90 | [Subsets II](https://leetcode-py.wisl.dev/problems/subsets-ii) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/subsets_ii/solution.py) |
| 93 | [Restore IP Addresses](https://leetcode-py.wisl.dev/problems/restore-ip-addresses) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/restore_ip_addresses/solution.py) |
| 95 | [Unique Binary Search Trees II](https://leetcode-py.wisl.dev/problems/unique-binary-search-trees-ii) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/unique_binary_search_trees_ii/solution.py) |
| 113 | [Path Sum II](https://leetcode-py.wisl.dev/problems/path-sum-ii) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/path_sum_ii/solution.py) |
| 126 | [Word Ladder II](https://leetcode-py.wisl.dev/problems/word-ladder-ii) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/word_ladder_ii/solution.py) |
| 131 | [Palindrome Partitioning](https://leetcode-py.wisl.dev/problems/palindrome-partitioning) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/palindrome_partitioning/solution.py) |
| 140 | [Word Break II](https://leetcode-py.wisl.dev/problems/word-break-ii) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/word_break_ii/solution.py) |
| 212 | [Word Search II](https://leetcode-py.wisl.dev/problems/word-search-ii) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/word_search_ii/solution.py) |
| 216 | [Combination Sum III](https://leetcode-py.wisl.dev/problems/combination-sum-iii) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/combination_sum_iii/solution.py) |
| 254 | [Factor Combinations](https://leetcode-py.wisl.dev/problems/factor-combinations) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/factor_combinations/solution.py) |
| 257 | [Binary Tree Paths](https://leetcode-py.wisl.dev/problems/binary-tree-paths) | Easy | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/binary_tree_paths/solution.py) |
| 267 | [Palindrome Permutation II](https://leetcode-py.wisl.dev/problems/palindrome-permutation-ii) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/palindrome_permutation_ii/solution.py) |
| 282 | [Expression Add Operators](https://leetcode-py.wisl.dev/problems/expression-add-operators) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/expression_add_operators/solution.py) |
| 291 | [Word Pattern II](https://leetcode-py.wisl.dev/problems/word-pattern-ii) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/word_pattern_ii/solution.py) |
| 294 | [Flip Game II](https://leetcode-py.wisl.dev/problems/flip-game-ii) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/flip_game_ii/solution.py) |
| 301 | [Remove Invalid Parentheses](https://leetcode-py.wisl.dev/problems/remove-invalid-parentheses) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/remove_invalid_parentheses/solution.py) |
| 306 | [Additive Number](https://leetcode-py.wisl.dev/problems/additive-number) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/additive_number/solution.py) |
| 320 | [Generalized Abbreviation](https://leetcode-py.wisl.dev/problems/generalized-abbreviation) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/generalized_abbreviation/solution.py) |
| 351 | [Android Unlock Patterns](https://leetcode-py.wisl.dev/problems/android-unlock-patterns) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/android_unlock_patterns/solution.py) |
| 357 | [Count Numbers with Unique Digits](https://leetcode-py.wisl.dev/problems/count-numbers-with-unique-digits) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/count_numbers_with_unique_digits/solution.py) |
| 401 | [Binary Watch](https://leetcode-py.wisl.dev/problems/binary-watch) | Easy | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/binary_watch/solution.py) |
| 411 | [Minimum Unique Word Abbreviation](https://leetcode-py.wisl.dev/problems/minimum-unique-word-abbreviation) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/minimum_unique_word_abbreviation/solution.py) |
| 425 | [Word Squares](https://leetcode-py.wisl.dev/problems/word-squares) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/word_squares/solution.py) |
| 465 | [Optimal Account Balancing](https://leetcode-py.wisl.dev/problems/optimal-account-balancing) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/optimal_account_balancing/solution.py) |
| 473 | [Matchsticks to Square](https://leetcode-py.wisl.dev/problems/matchsticks-to-square) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/matchsticks_to_square/solution.py) |
| 489 | [Robot Room Cleaner](https://leetcode-py.wisl.dev/problems/robot-room-cleaner) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/robot_room_cleaner/solution.py) |
| 491 | [Non-decreasing Subsequences](https://leetcode-py.wisl.dev/problems/non-decreasing-subsequences) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/non_decreasing_subsequences/solution.py) |
| 494 | [Target Sum](https://leetcode-py.wisl.dev/problems/target-sum) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/target_sum/solution.py) |
| 526 | [Beautiful Arrangement](https://leetcode-py.wisl.dev/problems/beautiful-arrangement) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/beautiful_arrangement/solution.py) |
| 638 | [Shopping Offers](https://leetcode-py.wisl.dev/problems/shopping-offers) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/shopping_offers/solution.py) |
| 679 | [24 Game](https://leetcode-py.wisl.dev/problems/game-24) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/game_24/solution.py) |
| 681 | [Next Closest Time](https://leetcode-py.wisl.dev/problems/next-closest-time) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/next_closest_time/solution.py) |
| 691 | [Stickers to Spell Word](https://leetcode-py.wisl.dev/problems/stickers-to-spell-word) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/stickers_to_spell_word/solution.py) |
| 698 | [Partition to K Equal Sum Subsets](https://leetcode-py.wisl.dev/problems/partition-to-k-equal-sum-subsets) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/partition_to_k_equal_sum_subsets/solution.py) |
| 756 | [Pyramid Transition Matrix](https://leetcode-py.wisl.dev/problems/pyramid-transition) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/pyramid_transition/solution.py) |
| 784 | [Letter Case Permutation](https://leetcode-py.wisl.dev/problems/letter-case-permutation) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/letter_case_permutation/solution.py) |
| 797 | [All Paths From Source to Target](https://leetcode-py.wisl.dev/problems/all-paths-source-target) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/all_paths_source_target/solution.py) |
| 816 | [Ambiguous Coordinates](https://leetcode-py.wisl.dev/problems/ambiguous-coordinates) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/ambiguous_coordinates/solution.py) |
| 842 | [Split Array into Fibonacci Sequence](https://leetcode-py.wisl.dev/problems/split-into-fibonacci-sequence) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/split_into_fibonacci_sequence/solution.py) |
| 949 | [Largest Time for Given Digits](https://leetcode-py.wisl.dev/problems/largest-time-for-given-digits) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/largest_time_for_given_digits/solution.py) |
| 967 | [Numbers With Same Consecutive Differences](https://leetcode-py.wisl.dev/problems/numbers-with-same-consecutive-differences) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/numbers_with_same_consecutive_differences/solution.py) |
| 980 | [Unique Paths III](https://leetcode-py.wisl.dev/problems/unique-paths-iii) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/unique_paths_iii/solution.py) |
| 988 | [Smallest String Starting From Leaf](https://leetcode-py.wisl.dev/problems/smallest-string-starting-from-leaf) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/smallest_string_starting_from_leaf/solution.py) |
| 996 | [Number of Squareful Arrays](https://leetcode-py.wisl.dev/problems/number-of-squareful-arrays) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/number_of_squareful_arrays/solution.py) |
| 1079 | [Letter Tile Possibilities](https://leetcode-py.wisl.dev/problems/letter-tile-possibilities) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/letter_tile_possibilities/solution.py) |
| 1087 | [Brace Expansion](https://leetcode-py.wisl.dev/problems/brace-expansion) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/brace_expansion/solution.py) |
| 1088 | [Confusing Number II](https://leetcode-py.wisl.dev/problems/confusing-number-ii) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/confusing_number_ii/solution.py) |
| 1215 | [Stepping Numbers](https://leetcode-py.wisl.dev/problems/stepping-numbers) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/stepping_numbers/solution.py) |
| 1219 | [Path with Maximum Gold](https://leetcode-py.wisl.dev/problems/path-with-maximum-gold) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/path_with_maximum_gold/solution.py) |
| 1239 | [Maximum Length of a Concatenated String with Unique Characters](https://leetcode-py.wisl.dev/problems/maximum-length-of-a-concatenated-string-with-unique-characters) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/maximum_length_of_a_concatenated_string_with_unique_characters/solution.py) |
| 1255 | [Maximum Score Words Formed by Letters](https://leetcode-py.wisl.dev/problems/maximum-score-words-formed-by-letters) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/maximum_score_words_formed_by_letters/solution.py) |
| 1258 | [Synonymous Sentences](https://leetcode-py.wisl.dev/problems/synonymous-sentences) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/synonymous_sentences/solution.py) |
| 1415 | [The k-th Lexicographical String of All Happy Strings of Length n](https://leetcode-py.wisl.dev/problems/k-th-lexicographical-string-of-all-happy-strings-of-length-n) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/k_th_lexicographical_string_of_all_happy_strings_of_length_n/solution.py) |
| 1593 | [Split a String Into the Max Number of Unique Substrings](https://leetcode-py.wisl.dev/problems/split-a-string-into-the-max-number-of-unique-substrings) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/split_a_string_into_the_max_number_of_unique_substrings/solution.py) |
| 1718 | [Construct the Lexicographically Largest Valid Sequence](https://leetcode-py.wisl.dev/problems/construct-the-lexicographically-largest-valid-sequence) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/construct_the_lexicographically_largest_valid_sequence/solution.py) |
| 1780 | [Check if Number is a Sum of Powers of Three](https://leetcode-py.wisl.dev/problems/check-if-number-is-a-sum-of-powers-of-three) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/check_if_number_is_a_sum_of_powers_of_three/solution.py) |
| 1799 | [Maximize Score After N Operations](https://leetcode-py.wisl.dev/problems/maximize-score-after-n-operations) | Hard | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/maximize_score_after_n_operations/solution.py) |
| 1849 | [Splitting a String Into Descending Consecutive Values](https://leetcode-py.wisl.dev/problems/splitting-a-string-into-descending-consecutive-values) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/splitting_a_string_into_descending_consecutive_values/solution.py) |
| 1863 | [Sum of All Subset XOR Totals](https://leetcode-py.wisl.dev/problems/sum-of-all-subset-xor-totals) | Easy | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/sum_of_all_subset_xor_totals/solution.py) |
| 1980 | [Find Unique Binary String](https://leetcode-py.wisl.dev/problems/find-unique-binary-string) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/find_unique_binary_string/solution.py) |
| 2002 | [Maximum Product of the Length of Two Palindromic Subsequences](https://leetcode-py.wisl.dev/problems/maximum-product-of-the-length-of-two-palindromic-subsequences) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/maximum_product_of_the_length_of_two_palindromic_subsequences/solution.py) |
| 2044 | [Count Number of Maximum Bitwise-OR Subsets](https://leetcode-py.wisl.dev/problems/count-number-of-maximum-bitwise-or-subsets) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/count_number_of_maximum_bitwise_or_subsets/solution.py) |
| 2375 | [Construct Smallest Number From DI String](https://leetcode-py.wisl.dev/problems/construct-smallest-number-from-di-string) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/construct_smallest_number_from_di_string/solution.py) |
| 2597 | [The Number of Beautiful Subsets](https://leetcode-py.wisl.dev/problems/the-number-of-beautiful-subsets) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/the_number_of_beautiful_subsets/solution.py) |
| 2698 | [Find the Punishment Number of an Integer](https://leetcode-py.wisl.dev/problems/find-the-punishment-number-of-an-integer) | Medium | [solution.py](https://github.com/wislertt/leetcode-py/blob/main/leetcode/find_the_punishment_number_of_an_integer/solution.py) |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.