leetcode-py-sdk 0.43.7__tar.gz → 0.45.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/PKG-INFO +1 -1
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/pyproject.toml +1 -1
- leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/combination_sum_ii.json +79 -0
- leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/copy_list_with_random_pointer.json +91 -0
- leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/distinct_subsequences.json +90 -0
- leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/edit_distance.json +89 -0
- leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/generate_parentheses.json +76 -0
- leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/interleaving_string.json +96 -0
- leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/multiply_strings.json +79 -0
- leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/n_queens.json +90 -0
- leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/plus_one.json +92 -0
- leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/powx_n.json +82 -0
- leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/regular_expression_matching.json +87 -0
- leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/search_a_2d_matrix.json +91 -0
- leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/single_number.json +91 -0
- leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/subsets_ii.json +88 -0
- leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/surrounded_regions.json +89 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/two_sum.json +1 -1
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/tags.json5 +15 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/generator.py +3 -1
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/README.md +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/__init__.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/__init__.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/commands/__init__.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/commands/gen.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/commands/list.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/commands/scrape.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/main.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/cookiecutter.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/accounts_merge.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/add_binary.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/add_two_numbers.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/alien_dictionary.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/balanced_binary_tree.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/basic_calculator.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/best_time_to_buy_and_sell_stock.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_search.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_inorder_traversal.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_level_order_traversal.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_maximum_path_sum.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_postorder_traversal.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_preorder_traversal.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_right_side_view.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/cheapest_flights_within_k_stops.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/climbing_stairs.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/clone_graph.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/coin_change.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/combination_sum.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/construct_binary_tree_from_preorder_and_inorder_traversal.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/container_with_most_water.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/contains_duplicate.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/contiguous_array.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/counting_bits.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/course_schedule.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/course_schedule_ii.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/daily_temperatures.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/decode_string.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/decode_ways.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/design_add_and_search_words_data_structure.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/design_in_memory_file_system.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/diagonal_traverse.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/diameter_of_binary_tree.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/encode_and_decode_strings.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/evaluate_reverse_polish_notation.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_all_anagrams_in_a_string.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_first_and_last_position_of_element_in_sorted_array.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_k_closest_elements.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_median_from_data_stream.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_minimum_in_rotated_sorted_array.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_the_duplicate_number.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/first_bad_version.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/first_missing_positive.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/flood_fill.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/gas_station.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/graph_valid_tree.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/group_anagrams.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/house_robber.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/house_robber_ii.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/implement_queue_using_stacks.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/implement_trie_prefix_tree.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/insert_interval.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/invert_binary_tree.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/is_graph_bipartite.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/is_subsequence.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/jump_game.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/jump_game_ii.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/k_closest_points_to_origin.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/kth_smallest_element_in_a_bst.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/largest_rectangle_in_histogram.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/letter_combinations_of_a_phone_number.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/linked_list_cycle.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/linked_list_cycle_ii.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_common_subsequence.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_consecutive_sequence.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_increasing_path_in_a_matrix.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_increasing_subsequence.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_palindrome.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_palindromic_substring.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_repeating_character_replacement.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_substring_without_repeating_characters.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/lowest_common_ancestor_of_a_binary_search_tree.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/lowest_common_ancestor_of_a_binary_tree.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/lru_cache.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/majority_element.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/max_points_on_a_line.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_depth_of_binary_tree.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_product_subarray.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_profit_in_job_scheduling.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_subarray.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_width_of_binary_tree.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/median_of_two_sorted_arrays.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/meeting_rooms.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/meeting_rooms_ii.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_intervals.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_k_sorted_lists.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_two_sorted_lists.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/middle_of_the_linked_list.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/min_cost_to_connect_all_points.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/min_stack.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_height_trees.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_path_sum.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_window_substring.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/missing_number.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/my_calendar_i.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/next_permutation.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/non_overlapping_intervals.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_1_bits.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_connected_components_in_an_undirected_graph.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_islands.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_provinces.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/odd_even_linked_list.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/pacific_atlantic_water_flow.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/palindrome_partitioning.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/palindromic_substrings.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/partition_equal_subset_sum.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/path_sum_ii.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/path_sum_iii.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/permutation_in_string.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/permutations.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/product_of_array_except_self.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/ransom_note.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/remove_nth_node_from_end_of_list.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reorder_list.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_bits.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_integer.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_linked_list.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_linked_list_ii.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_nodes_in_k_group.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_words_in_a_string.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/rotate_array.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/rotate_image.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/rotting_oranges.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/same_tree.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/search_in_rotated_sorted_array.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/serialize_and_deserialize_binary_tree.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/set_matrix_zeroes.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/single_number_iii.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/sliding_window_maximum.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/sort_colors.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/spiral_matrix.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/string_to_integer_atoi.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/subarray_sum_equals_k.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/subsets.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/subtree_of_another_tree.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/sum_of_two_integers.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/swap_nodes_in_pairs.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/task_scheduler.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/three_sum.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/time_based_key_value_store.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/top_k_frequent_elements.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/top_k_frequent_words.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/trapping_rain_water.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/unique_paths.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_anagram.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_palindrome.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_parentheses.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_sudoku.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/validate_binary_search_tree.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/word_break.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/word_ladder.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/word_search.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/word_search_ii.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/zero_one_matrix.json +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/README.md +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/__init__.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/helpers.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/playground.ipynb +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/solution.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/test_solution.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/utils/__init__.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/utils/problem_finder.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/utils/resources.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/utils/tag_helpers.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/__init__.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/_utils.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/dict_tree.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/doubly_list_node.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/graph_node.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/list_node.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/tree_node.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/py.typed +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/__init__.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/check_test_cases.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/logged_test.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/parser.py +0 -0
- {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/scraper.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: leetcode-py-sdk
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.45.0
|
|
4
4
|
Summary: Modern Python LeetCode practice environment with automated problem generation, beautiful data structure visualizations, and comprehensive testing
|
|
5
5
|
Keywords: algorithms,coding-practice,data-structures,interview-prep,leetcode
|
|
6
6
|
Author: Wisaroot Lertthaweedech
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "leetcode-py-sdk"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.45.0" # use git tag instead
|
|
4
4
|
description = "Modern Python LeetCode practice environment with automated problem generation, beautiful data structure visualizations, and comprehensive testing"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "Wisaroot Lertthaweedech", email = "l.wisaroot@gmail.com"}
|
leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/combination_sum_ii.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"problem_name": "combination_sum_ii",
|
|
3
|
+
"solution_class_name": "Solution",
|
|
4
|
+
"problem_number": "40",
|
|
5
|
+
"problem_title": "Combination Sum II",
|
|
6
|
+
"difficulty": "Medium",
|
|
7
|
+
"topics": "Array, Backtracking",
|
|
8
|
+
"_tags": { "list": ["neetcode-150"] },
|
|
9
|
+
"readme_description": "Given a collection of candidate numbers (`candidates`) and a target number (`target`), find all unique combinations in `candidates` where the candidate numbers sum to `target`.\n\nEach number in `candidates` may only be used **once** in the combination.\n\n**Note:** The solution set must not contain duplicate combinations.",
|
|
10
|
+
"_readme_examples": {
|
|
11
|
+
"list": [
|
|
12
|
+
{
|
|
13
|
+
"content": "```\nInput: candidates = [10,1,2,7,6,1,5], target = 8\nOutput: [[1,1,6],[1,2,5],[1,7],[2,6]]\n```"
|
|
14
|
+
},
|
|
15
|
+
{ "content": "```\nInput: candidates = [2,5,2,1,2], target = 5\nOutput: [[1,2,2],[5]]\n```" }
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"readme_constraints": "- 1 <= candidates.length <= 100\n- 1 <= candidates[i] <= 50\n- 1 <= target <= 30",
|
|
19
|
+
"readme_additional": "",
|
|
20
|
+
"helpers_imports": "",
|
|
21
|
+
"helpers_content": "",
|
|
22
|
+
"helpers_run_name": "combination_sum2",
|
|
23
|
+
"helpers_run_signature": "(solution_class: type, candidates: list[int], target: int)",
|
|
24
|
+
"helpers_run_body": " implementation = solution_class()\n result = implementation.combination_sum2(candidates, target)\n return sorted([sorted(combo) for combo in result])",
|
|
25
|
+
"helpers_assert_name": "combination_sum2",
|
|
26
|
+
"helpers_assert_signature": "(result: list[list[int]], expected: list[list[int]]) -> bool",
|
|
27
|
+
"helpers_assert_body": " expected_sorted = sorted([sorted(combo) for combo in expected])\n assert result == expected_sorted\n return True",
|
|
28
|
+
"solution_imports": "",
|
|
29
|
+
"solution_contents": "",
|
|
30
|
+
"solution_class_content": "",
|
|
31
|
+
"test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_combination_sum2, run_combination_sum2\nfrom .solution import Solution",
|
|
32
|
+
"test_content": "",
|
|
33
|
+
"test_class_name": "CombinationSumII",
|
|
34
|
+
"test_class_content": " def setup_method(self):\n self.solution = Solution()",
|
|
35
|
+
"_solution_methods": {
|
|
36
|
+
"list": [
|
|
37
|
+
{
|
|
38
|
+
"name": "combination_sum2",
|
|
39
|
+
"signature": "(self, candidates: list[int], target: int) -> list[list[int]]",
|
|
40
|
+
"body": " # TODO: Implement combination_sum2\n return []"
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
"_test_helper_methods": {
|
|
45
|
+
"list": [{ "name": "setup_method", "parameters": "", "body": "self.solution = Solution()" }]
|
|
46
|
+
},
|
|
47
|
+
"_test_methods": {
|
|
48
|
+
"list": [
|
|
49
|
+
{
|
|
50
|
+
"name": "test_combination_sum2",
|
|
51
|
+
"signature": "(self, candidates: list[int], target: int, expected: list[list[int]])",
|
|
52
|
+
"parametrize": "candidates, target, expected",
|
|
53
|
+
"test_cases": {
|
|
54
|
+
"list": [
|
|
55
|
+
"([10, 1, 2, 7, 6, 1, 5], 8, [[1, 1, 6], [1, 2, 5], [1, 7], [2, 6]])",
|
|
56
|
+
"([2, 5, 2, 1, 2], 5, [[1, 2, 2], [5]])",
|
|
57
|
+
"([1], 1, [[1]])",
|
|
58
|
+
"([1], 2, [])",
|
|
59
|
+
"([2], 1, [])",
|
|
60
|
+
"([1, 1], 2, [[1, 1]])",
|
|
61
|
+
"([1, 1, 1], 2, [[1, 1]])",
|
|
62
|
+
"([1, 1, 1, 1, 1], 3, [[1, 1, 1]])",
|
|
63
|
+
"([1, 2], 4, [])",
|
|
64
|
+
"([1, 2, 3], 3, [[1, 2], [3]])",
|
|
65
|
+
"([5, 3, 2, 1], 6, [[1, 2, 3], [1, 5]])",
|
|
66
|
+
"([1, 2, 2, 2, 5], 5, [[1, 2, 2], [5]])",
|
|
67
|
+
"([2, 2, 2], 4, [[2, 2]])",
|
|
68
|
+
"([1, 1, 2, 2], 4, [[1, 1, 2], [2, 2]])"
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"body": " result = run_combination_sum2(Solution, candidates, target)\n assert_combination_sum2(result, expected)"
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
"playground_imports": "from helpers import run_combination_sum2, assert_combination_sum2\nfrom solution import Solution",
|
|
76
|
+
"playground_setup": "# Example test case\ncandidates = [10, 1, 2, 7, 6, 1, 5]\ntarget = 8\nexpected = [[1, 1, 6], [1, 2, 5], [1, 7], [2, 6]]",
|
|
77
|
+
"playground_run": "result = run_combination_sum2(Solution, candidates, target)\nresult",
|
|
78
|
+
"playground_assert": "assert_combination_sum2(result, expected)"
|
|
79
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"problem_name": "copy_list_with_random_pointer",
|
|
3
|
+
"solution_class_name": "Solution",
|
|
4
|
+
"problem_number": "138",
|
|
5
|
+
"problem_title": "Copy List with Random Pointer",
|
|
6
|
+
"difficulty": "Medium",
|
|
7
|
+
"topics": "Hash Table, Linked List",
|
|
8
|
+
"_tags": {
|
|
9
|
+
"list": ["neetcode-150"]
|
|
10
|
+
},
|
|
11
|
+
"readme_description": "A linked list of length `n` is given such that each node contains an additional **random pointer**, which could point to any node in the list, or `null`.\n\nConstruct a [**deep copy**](https://en.wikipedia.org/wiki/Object_copying#Deep_copy) of the list. The deep copy should consist of exactly `n` **brand new** nodes, where each new node has its value set to the value of its corresponding original node. Both the `next` and `random` pointer of the new nodes should point to new nodes in the copied list such that the pointers in the original list and copied list represent the same list state. **None of the pointers in the new list should point to nodes in the original list**.\n\nReturn *the head of the copied linked list*.\n\nThe linked list is represented in the input/output as a list of `n` nodes. Each node is represented as a pair of `[val, random_index]` where:\n\n- `val`: an integer representing `Node.val`\n- `random_index`: the index of the node (range from `0` to `n-1`) that the `random` pointer points to, or `null` if it does not point to any node.",
|
|
12
|
+
"_readme_examples": {
|
|
13
|
+
"list": [
|
|
14
|
+
{
|
|
15
|
+
"content": "\n\n```\nInput: head = [[7,null],[13,0],[11,4],[10,2],[1,0]]\nOutput: [[7,null],[13,0],[11,4],[10,2],[1,0]]\n```"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"content": "\n\n```\nInput: head = [[1,1],[2,1]]\nOutput: [[1,1],[2,1]]\n```"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"content": "\n\n```\nInput: head = [[3,null],[3,0],[3,null]]\nOutput: [[3,null],[3,0],[3,null]]\n```"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
"readme_constraints": "- 0 <= n <= 1000\n- -10^4 <= Node.val <= 10^4\n- Node.random is null or points to some node in the linked list.",
|
|
26
|
+
"readme_additional": "",
|
|
27
|
+
"helpers_imports": "from .solution import Node",
|
|
28
|
+
"helpers_content": "def _build_random_list(nodes: list[list[int | None]]) -> Node | None:\n if not nodes:\n return None\n created: list[Node] = []\n for node_spec in nodes:\n val = node_spec[0]\n assert isinstance(val, int)\n created.append(Node(val))\n for i, node_spec in enumerate(nodes):\n if i + 1 < len(created):\n created[i].next = created[i + 1]\n rand_idx = node_spec[1]\n if rand_idx is not None:\n created[i].random = created[rand_idx]\n return created[0]\n\n\ndef _serialize_random_list(head: Node | None) -> list[list[int | None]]:\n index_by_id: dict[int, int] = {}\n cur: Node | None = head\n i = 0\n while cur is not None:\n index_by_id[id(cur)] = i\n i += 1\n cur = cur.next\n result: list[list[int | None]] = []\n cur = head\n while cur is not None:\n rand_idx = index_by_id[id(cur.random)] if cur.random is not None else None\n result.append([cur.val, rand_idx])\n cur = cur.next\n return result",
|
|
29
|
+
"helpers_run_name": "copy_random_list",
|
|
30
|
+
"helpers_run_signature": "(solution_class: type, nodes: list[list[int | None]])",
|
|
31
|
+
"helpers_run_body": " implementation = solution_class()\n head = _build_random_list(nodes)\n copied = implementation.copy_random_list(head)\n return _serialize_random_list(copied)",
|
|
32
|
+
"helpers_assert_name": "copy_random_list",
|
|
33
|
+
"helpers_assert_signature": "(result: list[list[int | None]], expected: list[list[int | None]]) -> bool",
|
|
34
|
+
"helpers_assert_body": " assert result == expected\n return True",
|
|
35
|
+
"solution_imports": "from __future__ import annotations",
|
|
36
|
+
"solution_contents": "class Node:\n def __init__(self, x: int, next: Node | None = None, random: Node | None = None):\n self.val = int(x)\n self.next = next\n self.random = random\n\n\n",
|
|
37
|
+
"solution_class_content": "",
|
|
38
|
+
"test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_copy_random_list, run_copy_random_list\nfrom .solution import Solution",
|
|
39
|
+
"test_content": "",
|
|
40
|
+
"test_class_name": "CopyListWithRandomPointer",
|
|
41
|
+
"test_class_content": " def setup_method(self):\n self.solution = Solution()",
|
|
42
|
+
"_solution_methods": {
|
|
43
|
+
"list": [
|
|
44
|
+
{
|
|
45
|
+
"name": "copy_random_list",
|
|
46
|
+
"signature": "(self, head: Node | None) -> Node | None",
|
|
47
|
+
"body": " # TODO: Implement copy_random_list\n return None"
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
"_test_helper_methods": {
|
|
52
|
+
"list": [
|
|
53
|
+
{
|
|
54
|
+
"name": "setup_method",
|
|
55
|
+
"parameters": "",
|
|
56
|
+
"body": "self.solution = Solution()"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"_test_methods": {
|
|
61
|
+
"list": [
|
|
62
|
+
{
|
|
63
|
+
"name": "test_copy_random_list",
|
|
64
|
+
"signature": "(self, nodes: list[list[int | None]], expected: list[list[int | None]])",
|
|
65
|
+
"parametrize": "nodes, expected",
|
|
66
|
+
"test_cases": {
|
|
67
|
+
"list": [
|
|
68
|
+
"([[7, None], [13, 0], [11, 4], [10, 2], [1, 0]], [[7, None], [13, 0], [11, 4], [10, 2], [1, 0]])",
|
|
69
|
+
"([[1, 1], [2, 1]], [[1, 1], [2, 1]])",
|
|
70
|
+
"([[3, None], [3, 0], [3, None]], [[3, None], [3, 0], [3, None]])",
|
|
71
|
+
"([], [])",
|
|
72
|
+
"([[1, None]], [[1, None]])",
|
|
73
|
+
"([[1, 0]], [[1, 0]])",
|
|
74
|
+
"([[1, None], [2, None]], [[1, None], [2, None]])",
|
|
75
|
+
"([[5, 1], [6, None], [7, 0]], [[5, 1], [6, None], [7, 0]])",
|
|
76
|
+
"([[0, None], [1, 0], [2, 1], [3, 2]], [[0, None], [1, 0], [2, 1], [3, 2]])",
|
|
77
|
+
"([[1, None], [2, 2], [3, 2]], [[1, None], [2, 2], [3, 2]])",
|
|
78
|
+
"([[42, None]], [[42, None]])",
|
|
79
|
+
"([[1, 2], [2, None], [3, 0]], [[1, 2], [2, None], [3, 0]])",
|
|
80
|
+
"([[1, None], [2, 0], [3, 1], [4, 2]], [[1, None], [2, 0], [3, 1], [4, 2]])"
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
"body": " result = run_copy_random_list(Solution, nodes)\n assert_copy_random_list(result, expected)"
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
"playground_imports": "from helpers import run_copy_random_list, assert_copy_random_list\nfrom solution import Node, Solution",
|
|
88
|
+
"playground_setup": "# Example test case (each node is [val, random_index])\nnodes = [[7, None], [13, 0], [11, 4], [10, 2], [1, 0]]\nexpected = [[7, None], [13, 0], [11, 4], [10, 2], [1, 0]]",
|
|
89
|
+
"playground_run": "result = run_copy_random_list(Solution, nodes)\nresult",
|
|
90
|
+
"playground_assert": "assert_copy_random_list(result, expected)"
|
|
91
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"problem_name": "distinct_subsequences",
|
|
3
|
+
"solution_class_name": "Solution",
|
|
4
|
+
"problem_number": "115",
|
|
5
|
+
"problem_title": "Distinct Subsequences",
|
|
6
|
+
"difficulty": "Hard",
|
|
7
|
+
"topics": "String, Dynamic Programming",
|
|
8
|
+
"_tags": {
|
|
9
|
+
"list": ["neetcode-150"]
|
|
10
|
+
},
|
|
11
|
+
"readme_description": "Given two strings `s` and `t`, return *the number of distinct subsequences of* `s` *which equals* `t`.\n\nThe test cases are generated so that the answer fits on a **32-bit** signed integer.",
|
|
12
|
+
"_readme_examples": {
|
|
13
|
+
"list": [
|
|
14
|
+
{
|
|
15
|
+
"content": "```\nInput: s = \"rabbbit\", t = \"rabbit\"\nOutput: 3\nExplanation:\nAs shown below, there are 3 ways you can generate \"rabbit\" from s.\nrabbbit\nrabbbit\nrabbbit\n```"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"content": "```\nInput: s = \"babgbag\", t = \"bag\"\nOutput: 5\nExplanation:\nAs shown below, there are 5 ways you can generate \"bag\" from s.\nbabgbag\nbabgbag\nbabgbag\nbabgbag\nbabgbag\n```"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"readme_constraints": "- 1 <= s.length, t.length <= 1000\n- s and t consist of English letters.",
|
|
23
|
+
"readme_additional": "",
|
|
24
|
+
"helpers_imports": "",
|
|
25
|
+
"helpers_content": "",
|
|
26
|
+
"helpers_run_name": "num_distinct",
|
|
27
|
+
"helpers_run_signature": "(solution_class: type, s: str, t: str)",
|
|
28
|
+
"helpers_run_body": " implementation = solution_class()\n return implementation.num_distinct(s, t)",
|
|
29
|
+
"helpers_assert_name": "num_distinct",
|
|
30
|
+
"helpers_assert_signature": "(result: int, expected: int) -> bool",
|
|
31
|
+
"helpers_assert_body": " assert result == expected\n return True",
|
|
32
|
+
"solution_imports": "",
|
|
33
|
+
"solution_contents": "",
|
|
34
|
+
"solution_class_content": "",
|
|
35
|
+
"test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_num_distinct, run_num_distinct\nfrom .solution import Solution",
|
|
36
|
+
"test_content": "",
|
|
37
|
+
"test_class_name": "DistinctSubsequences",
|
|
38
|
+
"test_class_content": " def setup_method(self):\n self.solution = Solution()",
|
|
39
|
+
"_solution_methods": {
|
|
40
|
+
"list": [
|
|
41
|
+
{
|
|
42
|
+
"name": "num_distinct",
|
|
43
|
+
"signature": "(self, s: str, t: str) -> int",
|
|
44
|
+
"body": " # TODO: Implement num_distinct\n return 0"
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
"_test_helper_methods": {
|
|
49
|
+
"list": [
|
|
50
|
+
{
|
|
51
|
+
"name": "setup_method",
|
|
52
|
+
"parameters": "",
|
|
53
|
+
"body": "self.solution = Solution()"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
"_test_methods": {
|
|
58
|
+
"list": [
|
|
59
|
+
{
|
|
60
|
+
"name": "test_num_distinct",
|
|
61
|
+
"signature": "(self, s: str, t: str, expected: int)",
|
|
62
|
+
"parametrize": "s, t, expected",
|
|
63
|
+
"test_cases": {
|
|
64
|
+
"list": [
|
|
65
|
+
"('rabbbit', 'rabbit', 3)",
|
|
66
|
+
"('babgbag', 'bag', 5)",
|
|
67
|
+
"('a', 'a', 1)",
|
|
68
|
+
"('a', 'b', 0)",
|
|
69
|
+
"('aaa', 'a', 3)",
|
|
70
|
+
"('aaa', 'aa', 3)",
|
|
71
|
+
"('aaaa', 'aa', 6)",
|
|
72
|
+
"('abc', 'abc', 1)",
|
|
73
|
+
"('abc', 'abcd', 0)",
|
|
74
|
+
"('abab', 'ab', 3)",
|
|
75
|
+
"('abab', 'bab', 1)",
|
|
76
|
+
"('abcabc', 'abc', 4)",
|
|
77
|
+
"('dddd', 'dd', 6)",
|
|
78
|
+
"('aab', 'ab', 2)",
|
|
79
|
+
"('bbb', 'bb', 3)"
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
"body": " result = run_num_distinct(Solution, s, t)\n assert_num_distinct(result, expected)"
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
"playground_imports": "from helpers import run_num_distinct, assert_num_distinct\nfrom solution import Solution",
|
|
87
|
+
"playground_setup": "# Example test case\ns = 'rabbbit'\nt = 'rabbit'\nexpected = 3",
|
|
88
|
+
"playground_run": "result = run_num_distinct(Solution, s, t)\nresult",
|
|
89
|
+
"playground_assert": "assert_num_distinct(result, expected)"
|
|
90
|
+
}
|
leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/edit_distance.json
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"problem_name": "edit_distance",
|
|
3
|
+
"solution_class_name": "Solution",
|
|
4
|
+
"problem_number": "72",
|
|
5
|
+
"problem_title": "Edit Distance",
|
|
6
|
+
"difficulty": "Hard",
|
|
7
|
+
"topics": "String, Dynamic Programming",
|
|
8
|
+
"_tags": {
|
|
9
|
+
"list": ["neetcode-150"]
|
|
10
|
+
},
|
|
11
|
+
"readme_description": "Given two strings `word1` and `word2`, return *the minimum number of operations required to convert* `word1` *to* `word2`.\n\nYou have the following three operations permitted on a word:\n\n- Insert a character\n- Delete a character\n- Replace a character",
|
|
12
|
+
"_readme_examples": {
|
|
13
|
+
"list": [
|
|
14
|
+
{
|
|
15
|
+
"content": "```\nInput: word1 = \"horse\", word2 = \"ros\"\nOutput: 3\nExplanation:\nhorse -> rorse (replace 'h' with 'r')\nrorse -> rose (remove 'r')\nrose -> ros (remove 'e')\n```"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"content": "```\nInput: word1 = \"intention\", word2 = \"execution\"\nOutput: 5\nExplanation:\nintention -> inention (remove 't')\ninention -> enention (replace 'i' with 'e')\nenention -> exention (replace 'n' with 'x')\nexention -> exection (replace 'n' with 'c')\nexection -> execution (insert 'u')\n```"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"readme_constraints": "- 0 <= word1.length, word2.length <= 500\n- word1 and word2 consist of lowercase English letters.",
|
|
23
|
+
"readme_additional": "",
|
|
24
|
+
"helpers_imports": "",
|
|
25
|
+
"helpers_content": "",
|
|
26
|
+
"helpers_run_name": "min_distance",
|
|
27
|
+
"helpers_run_signature": "(solution_class: type, word1: str, word2: str)",
|
|
28
|
+
"helpers_run_body": " implementation = solution_class()\n return implementation.min_distance(word1, word2)",
|
|
29
|
+
"helpers_assert_name": "min_distance",
|
|
30
|
+
"helpers_assert_signature": "(result: int, expected: int) -> bool",
|
|
31
|
+
"helpers_assert_body": " assert result == expected\n return True",
|
|
32
|
+
"solution_imports": "",
|
|
33
|
+
"solution_contents": "",
|
|
34
|
+
"solution_class_content": "",
|
|
35
|
+
"test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_min_distance, run_min_distance\nfrom .solution import Solution",
|
|
36
|
+
"test_content": "",
|
|
37
|
+
"test_class_name": "EditDistance",
|
|
38
|
+
"test_class_content": " def setup_method(self):\n self.solution = Solution()",
|
|
39
|
+
"_solution_methods": {
|
|
40
|
+
"list": [
|
|
41
|
+
{
|
|
42
|
+
"name": "min_distance",
|
|
43
|
+
"signature": "(self, word1: str, word2: str) -> int",
|
|
44
|
+
"body": " # TODO: Implement min_distance\n return 0"
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
"_test_helper_methods": {
|
|
49
|
+
"list": [
|
|
50
|
+
{
|
|
51
|
+
"name": "setup_method",
|
|
52
|
+
"parameters": "",
|
|
53
|
+
"body": "self.solution = Solution()"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
"_test_methods": {
|
|
58
|
+
"list": [
|
|
59
|
+
{
|
|
60
|
+
"name": "test_min_distance",
|
|
61
|
+
"signature": "(self, word1: str, word2: str, expected: int)",
|
|
62
|
+
"parametrize": "word1, word2, expected",
|
|
63
|
+
"test_cases": {
|
|
64
|
+
"list": [
|
|
65
|
+
"('horse', 'ros', 3)",
|
|
66
|
+
"('intention', 'execution', 5)",
|
|
67
|
+
"('', '', 0)",
|
|
68
|
+
"('', 'a', 1)",
|
|
69
|
+
"('a', '', 1)",
|
|
70
|
+
"('a', 'a', 0)",
|
|
71
|
+
"('ab', 'a', 1)",
|
|
72
|
+
"('a', 'ab', 1)",
|
|
73
|
+
"('ab', 'ba', 2)",
|
|
74
|
+
"('abc', 'abc', 0)",
|
|
75
|
+
"('abc', 'abd', 1)",
|
|
76
|
+
"('kitten', 'sitting', 3)",
|
|
77
|
+
"('saturday', 'sunday', 3)",
|
|
78
|
+
"('', 'abc', 3)"
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
"body": " result = run_min_distance(Solution, word1, word2)\n assert_min_distance(result, expected)"
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
"playground_imports": "from helpers import run_min_distance, assert_min_distance\nfrom solution import Solution",
|
|
86
|
+
"playground_setup": "# Example test case\nword1 = 'horse'\nword2 = 'ros'\nexpected = 3",
|
|
87
|
+
"playground_run": "result = run_min_distance(Solution, word1, word2)\nresult",
|
|
88
|
+
"playground_assert": "assert_min_distance(result, expected)"
|
|
89
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"problem_name": "generate_parentheses",
|
|
3
|
+
"solution_class_name": "Solution",
|
|
4
|
+
"problem_number": "22",
|
|
5
|
+
"problem_title": "Generate Parentheses",
|
|
6
|
+
"difficulty": "Medium",
|
|
7
|
+
"topics": "String, Dynamic Programming, Backtracking",
|
|
8
|
+
"_tags": { "list": ["neetcode-150"] },
|
|
9
|
+
"readme_description": "Given `n` pairs of parentheses, write a function to generate all combinations of well-formed parentheses.",
|
|
10
|
+
"_readme_examples": {
|
|
11
|
+
"list": [
|
|
12
|
+
{
|
|
13
|
+
"content": "```\nInput: n = 3\nOutput: [\"((()))\",\"(()())\",\"(())()\",\"()(())\",\"()()()\"]\n```"
|
|
14
|
+
},
|
|
15
|
+
{ "content": "```\nInput: n = 1\nOutput: [\"()\"]\n```" }
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"readme_constraints": "- 1 <= n <= 8",
|
|
19
|
+
"readme_additional": "",
|
|
20
|
+
"helpers_imports": "",
|
|
21
|
+
"helpers_content": "",
|
|
22
|
+
"helpers_run_name": "generate_parenthesis",
|
|
23
|
+
"helpers_run_signature": "(solution_class: type, n: int)",
|
|
24
|
+
"helpers_run_body": " implementation = solution_class()\n return sorted(implementation.generate_parenthesis(n))",
|
|
25
|
+
"helpers_assert_name": "generate_parenthesis",
|
|
26
|
+
"helpers_assert_signature": "(result: list[str], expected: list[str]) -> bool",
|
|
27
|
+
"helpers_assert_body": " assert sorted(result) == sorted(expected)\n return True",
|
|
28
|
+
"solution_imports": "",
|
|
29
|
+
"solution_contents": "",
|
|
30
|
+
"solution_class_content": "",
|
|
31
|
+
"test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_generate_parenthesis, run_generate_parenthesis\nfrom .solution import Solution",
|
|
32
|
+
"test_content": "",
|
|
33
|
+
"test_class_name": "GenerateParentheses",
|
|
34
|
+
"test_class_content": " def setup_method(self):\n self.solution = Solution()",
|
|
35
|
+
"_solution_methods": {
|
|
36
|
+
"list": [
|
|
37
|
+
{
|
|
38
|
+
"name": "generate_parenthesis",
|
|
39
|
+
"signature": "(self, n: int) -> list[str]",
|
|
40
|
+
"body": " # TODO: Implement generate_parenthesis\n return []"
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
"_test_helper_methods": {
|
|
45
|
+
"list": [{ "name": "setup_method", "parameters": "", "body": "self.solution = Solution()" }]
|
|
46
|
+
},
|
|
47
|
+
"_test_methods": {
|
|
48
|
+
"list": [
|
|
49
|
+
{
|
|
50
|
+
"name": "test_generate_parenthesis",
|
|
51
|
+
"signature": "(self, n: int, expected: list[str])",
|
|
52
|
+
"parametrize": "n, expected",
|
|
53
|
+
"test_cases": {
|
|
54
|
+
"list": [
|
|
55
|
+
"(1, ['()'])",
|
|
56
|
+
"(2, ['(())', '()()'])",
|
|
57
|
+
"(3, ['((()))', '(()())', '(())()', '()(())', '()()()'])",
|
|
58
|
+
"(4, ['(((())))', '((()()))', '((())())', '((()))()', '(()(()))', '(()()())', '(()())()', '(())(())', '(())()()', '()((()))', '()(()())', '()(())()', '()()(())', '()()()()'])",
|
|
59
|
+
"(0, [''])",
|
|
60
|
+
"(5, ['((((()))))', '(((()())))', '(((())()))', '(((()))())', '(((())))()', '((()(())))', '((()()()))', '((()())())', '((()()))()', '((())(()))', '((())()())', '((())())()', '((()))(())', '((()))()()', '(()((())))', '(()(()()))', '(()(())())', '(()(()))()', '(()()(()))', '(()()()())', '(()()())()', '(()())(())', '(()())()()', '(())((()))', '(())(()())', '(())(())()', '(())()(())', '(())()()()', '()(((())))', '()((()()))', '()((())())', '()((()))()', '()(()(()))', '()(()()())', '()(()())()', '()(())(())', '()(())()()', '()()((()))', '()()(()())', '()()(())()', '()()()(())', '()()()()()'])",
|
|
61
|
+
"pytest.param(1, ['()'], id='dup1')",
|
|
62
|
+
"pytest.param(2, ['(())', '()()'], id='dup2')",
|
|
63
|
+
"pytest.param(3, ['((()))', '(()())', '(())()', '()(())', '()()()'], id='dup3a')",
|
|
64
|
+
"pytest.param(3, ['((()))', '(()())', '(())()', '()(())', '()()()'], id='dup3b')",
|
|
65
|
+
"pytest.param(3, ['((()))', '(()())', '(())()', '()(())', '()()()'], id='dup3c')"
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
"body": " result = run_generate_parenthesis(Solution, n)\n assert_generate_parenthesis(result, expected)"
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
"playground_imports": "from helpers import run_generate_parenthesis, assert_generate_parenthesis\nfrom solution import Solution",
|
|
73
|
+
"playground_setup": "# Example test case\nn = 3\nexpected = ['((()))', '(()())', '(())()', '()(())', '()()()']",
|
|
74
|
+
"playground_run": "result = run_generate_parenthesis(Solution, n)\nresult",
|
|
75
|
+
"playground_assert": "assert_generate_parenthesis(result, expected)"
|
|
76
|
+
}
|
leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/interleaving_string.json
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"problem_name": "interleaving_string",
|
|
3
|
+
"solution_class_name": "Solution",
|
|
4
|
+
"problem_number": "97",
|
|
5
|
+
"problem_title": "Interleaving String",
|
|
6
|
+
"difficulty": "Medium",
|
|
7
|
+
"topics": "String, Dynamic Programming",
|
|
8
|
+
"_tags": {
|
|
9
|
+
"list": ["neetcode-150"]
|
|
10
|
+
},
|
|
11
|
+
"readme_description": "Given strings `s1`, `s2`, and `s3`, find whether `s3` is formed by an **interleaving** of `s1` and `s2`.\n\nAn interleaving of two strings `s` and `t` is a configuration where `s` and `t` are divided into `n` and `m` substrings respectively, such that:\n\n- s = s1 + s2 + ... + sn\n- t = t1 + t2 + ... + tm\n- |n - m| <= 1\n- The interleaving is s1 + t1 + s2 + t2 + s3 + t3 + ... or t1 + s1 + t2 + s2 + t3 + s3 + ...\n\n**Note:** `a + b` is the concatenation of strings `a` and `b`.",
|
|
12
|
+
"_readme_examples": {
|
|
13
|
+
"list": [
|
|
14
|
+
{
|
|
15
|
+
"content": "\n\n```\nInput: s1 = \"aabcc\", s2 = \"dbbca\", s3 = \"aadbbcbcac\"\nOutput: true\nExplanation: One way to obtain s3 is:\nSplit s1 into s1 = \"aa\" + \"bc\" + \"c\", and s2 into s2 = \"dbbc\" + \"a\".\nInterleaving the two splits, we get \"aadbbcbcac\".\n```"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"content": "```\nInput: s1 = \"aabcc\", s2 = \"dbbca\", s3 = \"aadbbbaccc\"\nOutput: false\nExplanation: Notice how it is hard to find a viable interleaving because s3 must preserve the character order of s1 and s2.\n```"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"content": "```\nInput: s1 = \"\", s2 = \"\", s3 = \"\"\nOutput: true\n```"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
"readme_constraints": "- 0 <= s1.length, s2.length <= 100\n- 0 <= s3.length <= 200\n- s1, s2, and s3 consist of lowercase English letters.",
|
|
26
|
+
"readme_additional": "",
|
|
27
|
+
"helpers_imports": "",
|
|
28
|
+
"helpers_content": "",
|
|
29
|
+
"helpers_run_name": "is_interleave",
|
|
30
|
+
"helpers_run_signature": "(solution_class: type, s1: str, s2: str, s3: str)",
|
|
31
|
+
"helpers_run_body": " implementation = solution_class()\n return implementation.is_interleave(s1, s2, s3)",
|
|
32
|
+
"helpers_assert_name": "is_interleave",
|
|
33
|
+
"helpers_assert_signature": "(result: bool, expected: bool) -> bool",
|
|
34
|
+
"helpers_assert_body": " assert result == expected\n return True",
|
|
35
|
+
"solution_imports": "",
|
|
36
|
+
"solution_contents": "",
|
|
37
|
+
"solution_class_content": "",
|
|
38
|
+
"test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_is_interleave, run_is_interleave\nfrom .solution import Solution",
|
|
39
|
+
"test_content": "",
|
|
40
|
+
"test_class_name": "InterleavingString",
|
|
41
|
+
"test_class_content": " def setup_method(self):\n self.solution = Solution()",
|
|
42
|
+
"_solution_methods": {
|
|
43
|
+
"list": [
|
|
44
|
+
{
|
|
45
|
+
"name": "is_interleave",
|
|
46
|
+
"signature": "(self, s1: str, s2: str, s3: str) -> bool",
|
|
47
|
+
"body": " # TODO: Implement is_interleave\n return False"
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
"_test_helper_methods": {
|
|
52
|
+
"list": [
|
|
53
|
+
{
|
|
54
|
+
"name": "setup_method",
|
|
55
|
+
"parameters": "",
|
|
56
|
+
"body": "self.solution = Solution()"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"_test_methods": {
|
|
61
|
+
"list": [
|
|
62
|
+
{
|
|
63
|
+
"name": "test_is_interleave",
|
|
64
|
+
"signature": "(self, s1: str, s2: str, s3: str, expected: bool)",
|
|
65
|
+
"parametrize": "s1, s2, s3, expected",
|
|
66
|
+
"test_cases": {
|
|
67
|
+
"list": [
|
|
68
|
+
"('aabcc', 'dbbca', 'aadbbcbcac', True)",
|
|
69
|
+
"('aabcc', 'dbbca', 'aadbbbaccc', False)",
|
|
70
|
+
"('', '', '', True)",
|
|
71
|
+
"('', '', 'a', False)",
|
|
72
|
+
"('a', '', 'a', True)",
|
|
73
|
+
"('', 'b', 'b', True)",
|
|
74
|
+
"('a', 'b', 'ab', True)",
|
|
75
|
+
"('a', 'b', 'ba', True)",
|
|
76
|
+
"('a', 'b', 'a', False)",
|
|
77
|
+
"('ab', 'cd', 'acbd', True)",
|
|
78
|
+
"('ab', 'cd', 'abcd', True)",
|
|
79
|
+
"('ab', 'cd', 'cdab', True)",
|
|
80
|
+
"('ab', 'cd', 'acdb', True)",
|
|
81
|
+
"('aa', 'ab', 'aaab', True)",
|
|
82
|
+
"('aa', 'ab', 'aaba', True)",
|
|
83
|
+
"('abc', 'def', 'abcdef', True)",
|
|
84
|
+
"('abc', 'def', 'adbecf', True)",
|
|
85
|
+
"('abc', 'def', 'defabc', True)"
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
"body": " result = run_is_interleave(Solution, s1, s2, s3)\n assert_is_interleave(result, expected)"
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
"playground_imports": "from helpers import run_is_interleave, assert_is_interleave\nfrom solution import Solution",
|
|
93
|
+
"playground_setup": "# Example test case\ns1 = 'aabcc'\ns2 = 'dbbca'\ns3 = 'aadbbcbcac'\nexpected = True",
|
|
94
|
+
"playground_run": "result = run_is_interleave(Solution, s1, s2, s3)\nresult",
|
|
95
|
+
"playground_assert": "assert_is_interleave(result, expected)"
|
|
96
|
+
}
|
leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/multiply_strings.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"problem_name": "multiply_strings",
|
|
3
|
+
"solution_class_name": "Solution",
|
|
4
|
+
"problem_number": "43",
|
|
5
|
+
"problem_title": "Multiply Strings",
|
|
6
|
+
"difficulty": "Medium",
|
|
7
|
+
"topics": "Math, String, Simulation",
|
|
8
|
+
"_tags": { "list": ["neetcode-150"] },
|
|
9
|
+
"readme_description": "Given two non-negative integers `num1` and `num2` represented as strings, return the product of `num1` and `num2`, also represented as a string.\n\n**Note:** You must not use any built-in BigInteger library or convert the inputs to integer directly.",
|
|
10
|
+
"_readme_examples": {
|
|
11
|
+
"list": [
|
|
12
|
+
{ "content": "```\nInput: num1 = \"2\", num2 = \"3\"\nOutput: \"6\"\n```" },
|
|
13
|
+
{ "content": "```\nInput: num1 = \"123\", num2 = \"456\"\nOutput: \"56088\"\n```" }
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
"readme_constraints": "- 1 <= num1.length, num2.length <= 200\n- `num1` and `num2` consist of digits only.\n- Both `num1` and `num2` do not contain any leading zero, except the number `0` itself.",
|
|
17
|
+
"readme_additional": "",
|
|
18
|
+
"helpers_imports": "",
|
|
19
|
+
"helpers_content": "",
|
|
20
|
+
"helpers_run_name": "multiply",
|
|
21
|
+
"helpers_run_signature": "(solution_class: type, num1: str, num2: str)",
|
|
22
|
+
"helpers_run_body": " implementation = solution_class()\n return implementation.multiply(num1, num2)",
|
|
23
|
+
"helpers_assert_name": "multiply",
|
|
24
|
+
"helpers_assert_signature": "(result: str, expected: str) -> bool",
|
|
25
|
+
"helpers_assert_body": " assert result == expected\n return True",
|
|
26
|
+
"solution_imports": "",
|
|
27
|
+
"solution_contents": "",
|
|
28
|
+
"solution_class_content": "",
|
|
29
|
+
"test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_multiply, run_multiply\nfrom .solution import Solution",
|
|
30
|
+
"test_content": "",
|
|
31
|
+
"test_class_name": "MultiplyStrings",
|
|
32
|
+
"test_class_content": " def setup_method(self):\n self.solution = Solution()",
|
|
33
|
+
"_solution_methods": {
|
|
34
|
+
"list": [
|
|
35
|
+
{
|
|
36
|
+
"name": "multiply",
|
|
37
|
+
"signature": "(self, num1: str, num2: str) -> str",
|
|
38
|
+
"body": " # TODO: Implement multiply\n return ''"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"_test_helper_methods": {
|
|
43
|
+
"list": [{ "name": "setup_method", "parameters": "", "body": "self.solution = Solution()" }]
|
|
44
|
+
},
|
|
45
|
+
"_test_methods": {
|
|
46
|
+
"list": [
|
|
47
|
+
{
|
|
48
|
+
"name": "test_multiply",
|
|
49
|
+
"signature": "(self, num1: str, num2: str, expected: str)",
|
|
50
|
+
"parametrize": "num1, num2, expected",
|
|
51
|
+
"test_cases": {
|
|
52
|
+
"list": [
|
|
53
|
+
"('2', '3', '6')",
|
|
54
|
+
"('123', '456', '56088')",
|
|
55
|
+
"('0', '0', '0')",
|
|
56
|
+
"('0', '123', '0')",
|
|
57
|
+
"('123', '0', '0')",
|
|
58
|
+
"('1', '1', '1')",
|
|
59
|
+
"('9', '9', '81')",
|
|
60
|
+
"('99', '99', '9801')",
|
|
61
|
+
"('999', '999', '998001')",
|
|
62
|
+
"('123456789', '987654321', '121932631112635269')",
|
|
63
|
+
"('2', '50', '100')",
|
|
64
|
+
"('10', '10', '100')",
|
|
65
|
+
"('100', '100', '10000')",
|
|
66
|
+
"('5', '5', '25')",
|
|
67
|
+
"('123', '1', '123')",
|
|
68
|
+
"('1', '999', '999')"
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"body": " result = run_multiply(Solution, num1, num2)\n assert_multiply(result, expected)"
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
"playground_imports": "from helpers import run_multiply, assert_multiply\nfrom solution import Solution",
|
|
76
|
+
"playground_setup": "# Example test case\nnum1 = '123'\nnum2 = '456'\nexpected = '56088'",
|
|
77
|
+
"playground_run": "result = run_multiply(Solution, num1, num2)\nresult",
|
|
78
|
+
"playground_assert": "assert_multiply(result, expected)"
|
|
79
|
+
}
|