Full Code of apachecn/apachecn-algo-zh for AI

master ca52c3b38633 cached
696 files
1.2 MB
474.3k tokens
10 symbols
1 requests
Download .txt
Showing preview only (1,429K chars total). Download the full file or copy to clipboard to get everything.
Repository: apachecn/apachecn-algo-zh
Branch: master
Commit: ca52c3b38633
Files: 696
Total size: 1.2 MB

Directory structure:
gitextract_q9u5mspj/

├── .gitignore
├── .nojekyll
├── 404.html
├── CNAME
├── Dockerfile
├── NAV.md
├── README.md
├── SUMMARY.md
├── asset/
│   ├── back-to-top.css
│   ├── back-to-top.js
│   ├── dark-mode.css
│   ├── dark-mode.js
│   ├── docsify-apachecn-footer.js
│   ├── docsify-baidu-push.js
│   ├── docsify-baidu-stat.js
│   ├── docsify-clicker.js
│   ├── docsify-cnzz.js
│   ├── docsify-quick-page.css
│   ├── docsify-quick-page.js
│   ├── edit.css
│   ├── edit.js
│   ├── prism-darcula.css
│   ├── share.css
│   ├── share.js
│   ├── style.css
│   └── vue.css
├── docs/
│   ├── jianzhioffer/
│   │   └── java/
│   │       ├── 03_01_DuplicationInArray.md
│   │       ├── 03_02_DuplicationInArrayNoEdit.md
│   │       ├── 04_FindInPartiallySortedMatrix.md
│   │       ├── 05_ReplaceSpaces.md
│   │       ├── 06_PrintListInReversedOrder.md
│   │       ├── 07_ConstructBinaryTree.md
│   │       ├── 08_NextNodeInBinaryTrees.md
│   │       ├── 09_01_QueueWithTwoStacks.md
│   │       ├── 09_02_StackWithTwoQueues.md
│   │       ├── 10_01_Fibonacci.md
│   │       ├── 10_02_JumpFloor.md
│   │       ├── 10_03_JumpFloorII.md
│   │       ├── 10_04_RectCover.md
│   │       ├── 11_MinNumberInRotatedArray.md
│   │       ├── 12_StringPathInMatrix.md
│   │       ├── 13_RobotMove.md
│   │       ├── 14_CuttingRope.md
│   │       ├── 15_NumberOf1InBinary.md
│   │       ├── 16_Power.md
│   │       ├── 17_Print1ToMaxOfNDigits.md
│   │       ├── 18_01_DeleteNodeInList.md
│   │       ├── 18_02_DeleteDuplicatedNode.md
│   │       ├── 19_RegularExpressionsMatching.md
│   │       ├── 20_NumericStrings.md
│   │       ├── 21_ReorderArray.md
│   │       ├── 22_KthNodeFromEnd.md
│   │       ├── 23_EntryNodeInListLoop.md
│   │       ├── 24_ReverseList.md
│   │       ├── 25_MergeSortedLists.md
│   │       ├── 26_SubstructureInTree.md
│   │       ├── 27_MirrorOfBinaryTree.md
│   │       ├── 28_SymmetricalBinaryTree.md
│   │       ├── 29_PrintMatrix.md
│   │       ├── 30_MinInStack.md
│   │       ├── 31_StackPushPopOrder.md
│   │       ├── 32_01_PrintTreeFromTopToBottom.md
│   │       ├── 32_02_PrintTreesInLines.md
│   │       ├── 32_03_PrintTreesInZigzag.md
│   │       ├── 33_SquenceOfBST.md
│   │       ├── 34_PathInTree.md
│   │       ├── 35_CopyComplexList.md
│   │       ├── 36_ConvertBinarySearchTree.md
│   │       ├── 37_SerializeBinaryTrees.md
│   │       ├── 38_StringPermutation.md
│   │       ├── 39_MoreThanHalfNumber.md
│   │       ├── 40_KLeastNumbers.md
│   │       ├── 41_StreamMedian.md
│   │       ├── 42_GreatestSumOfSubarrays.md
│   │       ├── 43_NumberOf1.md
│   │       ├── 44_DigitsInSequence.md
│   │       ├── 45_SortArrayForMinNumber.md
│   │       ├── 46_TranslateNumbersToStrings.md
│   │       ├── 47_MaxValueOfGifts.md
│   │       ├── 48_LongestSubstringWithoutDup.md
│   │       ├── 49_UglyNumber.md
│   │       ├── 50_01_FirstNotRepeatingChar.md
│   │       ├── 50_02_FristCharacterInStream.md
│   │       ├── 52_FirstCommonNodesInLists.md
│   │       ├── 53_01_NumberOfK.md
│   │       ├── 53_02_MissingNumber.md
│   │       ├── 53_03_IntegerIdenticalToIndex.md
│   │       ├── 54_KthNodeInBST.md
│   │       ├── 55_01_TreeDepth.md
│   │       ├── 55_02_BalancedBinaryTree.md
│   │       ├── 56_01_NumbersAppearOnce.md
│   │       ├── 56_02_NumberAppearingOnce.md
│   │       ├── 57_01_TwoNumbersWithSum.md
│   │       ├── 57_02_ContinuousSquenceWithSum.md
│   │       ├── 58_01_ReverseWordsInSentence.md
│   │       ├── 58_02_LeftRotateString.md
│   │       ├── 59_01_MaxInSlidingWindow.md
│   │       ├── 61_ContinousCards.md
│   │       ├── README.md
│   │       └── SUMMARY.md
│   ├── leetcode/
│   │   ├── cpp/
│   │   │   ├── 0001._Two_Sum.md
│   │   │   ├── 0002._Add_Two_Numbers.md
│   │   │   ├── 0003._Longest_Substring_Without_Repeating_Characters.md
│   │   │   ├── 0004._Median_of_Two_Sorted_Arrays.md
│   │   │   ├── 0005._Longest_Palindromic_Substring.md
│   │   │   ├── 0006._ZigZag_Conversion.md
│   │   │   ├── 0007._Reverse_Integer.md
│   │   │   ├── 0008._String_to_Integer_(atoi).md
│   │   │   ├── 0009._Palindrome_Number.md
│   │   │   ├── 0010._Regular_Expression_Matching.md
│   │   │   ├── 0011._Container_With_Most_Water.md
│   │   │   ├── 0012._Integer_to_Roman.md
│   │   │   ├── 0014._Longest_Common_Prefix.md
│   │   │   ├── 0015._3sum.md
│   │   │   ├── 0016._3Sum_Closest.md
│   │   │   ├── 0017._Letter_Combinations_of_a_Phone_Number.md
│   │   │   ├── 0018._4Sum.md
│   │   │   ├── 0019._Remove_Nth_Node_From_End_of_List.md
│   │   │   ├── 0020._Valid_Parentheses.md
│   │   │   ├── 0021._Merge_Two_Sorted_Lists.md
│   │   │   ├── 0022._Generate_Parentheses.md
│   │   │   ├── 0023._Merge_K_Sorted_Lists.md
│   │   │   ├── 0024._Swap_Nodes_in_Pairs.md
│   │   │   ├── 0025._Reverse_Nodes_In_K_Group.md
│   │   │   ├── 0026._Remove_Duplicates_From_Sorted_Array.md
│   │   │   ├── 0027._Remove_Element.md
│   │   │   ├── 0028._Implement_Strstr.md
│   │   │   ├── 0029._Divide_Two_Integers.md
│   │   │   ├── 0030._Substring_With_Concatenation_Of_All_Words.md
│   │   │   ├── 0031._Next_Permutatio.md
│   │   │   ├── 0032._Longest_Valid_Parentheses.md
│   │   │   ├── 0033._Search_in_Rotated_Sorted_Array.md
│   │   │   ├── 0034._Find_First_and_Last_Position_of_Element_in_Sorted_Array.md
│   │   │   ├── 0035._Search_Insert_Position.md
│   │   │   ├── 0036._Valid_Sudoku.md
│   │   │   ├── 0038._Count_and_Say.md
│   │   │   ├── 0039._Combination_Sum.md
│   │   │   ├── 0040._Combination_Sum_II.md
│   │   │   ├── 0041._First_Missing_Positive.md
│   │   │   ├── 0042._Trapping_Rain_Water.md
│   │   │   ├── 0043._Multiply_Strings.md
│   │   │   ├── 0044._Wildcard_Matching.md
│   │   │   ├── 0045._Jump_Game_II.md
│   │   │   ├── 0046._Permutations.md
│   │   │   ├── 0047._Permutations_II.md
│   │   │   ├── 0048._Rotate_Image.md
│   │   │   ├── 0049._Group_Anagrams.md
│   │   │   ├── 0050._powx_n.md
│   │   │   ├── 0051._N-Queens.md
│   │   │   ├── 0052._N-Queens_II.md
│   │   │   ├── 0053._Maximum_Subarray.md
│   │   │   ├── 0054._Spiral_Matrix.md
│   │   │   ├── 0055._Jump_Game.md
│   │   │   ├── 0056._Merge_Intervals.md
│   │   │   ├── 0057._Insert_Interval.md
│   │   │   ├── 0058._Length_of_Last_Word.md
│   │   │   ├── 0059._Spiral_Matrix_II.md
│   │   │   ├── 0060._Permutation_Sequence.md
│   │   │   ├── 0061._Rotate_List.md
│   │   │   ├── 0062._Unique_Paths.md
│   │   │   ├── 0063._Unique_Paths_II.md
│   │   │   ├── 0064._Minimum_Path_Sum.md
│   │   │   ├── 0065._Valid_Number.md
│   │   │   ├── 0066._Plus_One.md
│   │   │   ├── 0068._Text_Justification.md
│   │   │   ├── 0069._Sqr(x).md
│   │   │   ├── 0072._Edit_Distance.md
│   │   │   ├── 0075._Sort_Colors.md
│   │   │   ├── 0076._Minimum_Window_Substring.md
│   │   │   ├── 0077._combinations.md
│   │   │   ├── 0078._subsets.md
│   │   │   ├── 0081._Search_in_Rotated_Sorted_Array_II.md
│   │   │   ├── 0083._Remove_Duplicates_From_Sorted_Lists.md
│   │   │   ├── 0084._Largest_Rectangle_in_Histogram.md
│   │   │   ├── 0085._Maximal_Rectangle.md
│   │   │   ├── 0087._Scramble_String.md
│   │   │   ├── 0088._Merge_Sorted_Array.md
│   │   │   ├── 0090._Subsets_II.md
│   │   │   ├── 0094._binary_tree_inorder_traversal.md
│   │   │   ├── 0096._Unique_Binary_Search_Trees.md
│   │   │   ├── 0097._Interleaving_String.md
│   │   │   ├── 0099._Recover_Binary_Search_Tree.md
│   │   │   ├── 0100._same_tree.md
│   │   │   ├── 0101._Symmetric_Tree.md
│   │   │   ├── 0102._Binary_Tree_Level_Order_Traversal.md
│   │   │   ├── 0104._Maximum_Depth_of_Binary_Tree.md
│   │   │   ├── 0105._Construct_Binary_Tree_from_Preorder_and_Inorder_Traversal.md
│   │   │   ├── 0106._Construct_Binary_Tree_from_Inorder_and_Postorder_Traversal.md
│   │   │   ├── 0107._Binary_Tree_Level_Order_Traversal_II.md
│   │   │   ├── 0108._Convert_Sorted_Array_to_Binary_Search_Tree.md
│   │   │   ├── 0109._Convert_Sorted_List_to_Binary_Search_Tree.md
│   │   │   ├── 0110._Balanced_Binary_Tree.md
│   │   │   ├── 0111._Minimum_Depth_Of_Binary_Tree.md
│   │   │   ├── 0112._Path_Sum.md
│   │   │   ├── 0114._Flatten_Binary_Tree_to_Linked_List.md
│   │   │   ├── 0115._Distinct_Subsequences.md
│   │   │   ├── 0118._Pascals_Triangle.md
│   │   │   ├── 0119._Pascals_Triangle-II.md
│   │   │   ├── 0120._Triangle.md
│   │   │   ├── 0121._Best_Tim_to_Buy_and_Sell_Stock.md
│   │   │   ├── 0122._Best_Time_to_Buy_and_Sell_Stock_II.md
│   │   │   ├── 0123._Best_Time_to_Buy_and_Sell_Stock_III.md
│   │   │   ├── 0124._Binary_Tree_Maximum_Path_Sum.md
│   │   │   ├── 0127._Word_Ladde.md
│   │   │   ├── 0128._Longest_Consecutive_Sequence.md
│   │   │   ├── 0129._Sum_Root_to_Leaf_Numbers.md
│   │   │   ├── 0131._Palindrome_Partitioning.md
│   │   │   ├── 0136._Single_Numbe.md
│   │   │   ├── 0137._Single_Number_II.md
│   │   │   ├── 0141._Linked_List_Cycle.md
│   │   │   ├── 0142._Linked_List_Cycle_II.md
│   │   │   ├── 0144._Binary_Tree_Preorder_Traversal.md
│   │   │   ├── 0145._Binary_Tree_Postorder_Traversal.md
│   │   │   ├── 0147._Insert_on_Sort_List.md
│   │   │   ├── 0148._Sort_list.md
│   │   │   ├── 0151._Reverse_Words_in_a_String.md
│   │   │   ├── 0153._Find_Minimum_in_Rotated_Sorted_Array.md
│   │   │   ├── 0154._Find_Minimum_in_Rotated_Sorted_Array-II.md
│   │   │   ├── 0160._Intersection_Of_Two_Linked_Lists.md
│   │   │   ├── 0164._Maximum_Gap.md
│   │   │   ├── 0166._Fraction_to_Recurring_Decimal.md
│   │   │   ├── 0167._Two_Sum_II-Input_array_is_sorted.md
│   │   │   ├── 0199._Binary_Tree_Right_Side_View.md
│   │   │   ├── 0216._Combination_Sum_III.md
│   │   │   ├── 0230._Kth_Smallest_Element_in_a_BST.md
│   │   │   ├── 0260._Single_Number_III.md
│   │   │   ├── 0287._Find_the_Duplicate_Number.md
│   │   │   ├── 0326._Power_Of_Three.md
│   │   │   ├── 0328._Odd_Even_Linked_List.md
│   │   │   ├── 0329._Longest_Increasing_Path_in_a_Matrix.md
│   │   │   ├── 0338._Counting_Bits.md
│   │   │   ├── 0413._Arithmetic_Slices.md
│   │   │   ├── 0442._Find_All_Duplicates_in_an_Array.md
│   │   │   ├── 0513._Find_Bottom_Left_Tree_Value.md
│   │   │   ├── 0515._Find_Largest_Value_in_Each_Tree_Row.md
│   │   │   ├── 0540._Single_Element_in_a_Sorted_Array.md
│   │   │   ├── 0581._Shortest_Unsorted_Continuous_Subarray.md
│   │   │   ├── 0629._K_Inverse_Pairs_Array.md
│   │   │   ├── 0632._Smallest_Range.md
│   │   │   ├── 0654._maximum_binary_tree.md
│   │   │   ├── 0668._Kth_Smallest_Number_in_Multiplication_Table.md
│   │   │   ├── 0701._Insert_into_a_Binary_Search_Tree.md
│   │   │   ├── 0715._Range_Module.md
│   │   │   ├── 0719._Find_K-th_Smallest_Pair_Distance.md
│   │   │   ├── 0739._Daily_Temperatures.md
│   │   │   ├── 0797._All_Paths_From_Source_To_Target.md
│   │   │   ├── 0814._Binary_Tree_Pruning.md
│   │   │   ├── 0841._Keys_and_Rooms.md
│   │   │   ├── 0877._Stone_Game.md
│   │   │   ├── 0945._Minimum_Increment_to_Make_Array_Unique.md
│   │   │   ├── 0946._Validate_Stack_Sequences.md
│   │   │   ├── 0947._Most_Stones_Removed_with_Same_Row_or_Column.md
│   │   │   ├── 0948._Bag_of_Tokens.md
│   │   │   ├── 0949._Largest_Time_for_Given_Digits.md
│   │   │   ├── 0950._Reveal_Cards_In_Increasing_Order.md
│   │   │   ├── 0951._Flip_Equivalent_Binary_Trees.md
│   │   │   ├── 0952._Largest_Component_Size_by_Common_Factor.md
│   │   │   ├── README.md
│   │   │   └── SUMMARY.md
│   │   ├── java/
│   │   │   ├── 0001._Two_Sum.md
│   │   │   ├── 0002._add_two_numbers.md
│   │   │   ├── 0003._Longest_Substring_Without_Repeating_Characters.md
│   │   │   ├── 0004._Median_of_Two_Sorted_Arrays.md
│   │   │   ├── 0005._Longest_Palindromic_Substring.md
│   │   │   ├── 0006._ZigZag_Conversion.md
│   │   │   ├── 0007._Reverse_Integer.md
│   │   │   ├── 0023._Merge_K_Sorted_Lists.md
│   │   │   ├── 0141._linked_list_cycle.md
│   │   │   ├── 0218._The_Skyline_Problem.md
│   │   │   ├── 0238._product_of_array_except_self.md
│   │   │   ├── 0342._Power_of_Four.md
│   │   │   ├── 0403._Frog_Jump.md
│   │   │   ├── 0757._Set_Intersection_Size_At_Least_Two.md
│   │   │   ├── 0768._Max_Chunks_To_Make_Sorted_II.md
│   │   │   ├── 0780._Reaching_Points.md
│   │   │   ├── 0793._Preimage_Size_of_Factorial_Zeroes_Function.md
│   │   │   ├── 0827._Making_A_Large_Island.md
│   │   │   ├── 0828._Unique_Letter_String.md
│   │   │   ├── 0834._Sum_of_Distances_in_Tree.md
│   │   │   ├── 0843._Guess_the_Word.md
│   │   │   ├── 0847._Shortest_Path_Visiting_All_Nodes.md
│   │   │   ├── 0850._Rectangle_Area_II.md
│   │   │   ├── 0854._K-Similar_Strings.md
│   │   │   ├── 0857._Minimum_Cost_to_Hire_K_Workers.md
│   │   │   ├── 0862._Shortest_Subarray_with_Sum_at_Least_K.md
│   │   │   ├── 0864._Shortest_Path_to_Get_All_Keys.md
│   │   │   ├── 0871._Minimum_Number_of_Refueling_Stops.md
│   │   │   ├── 0878._Nth_Magical_Number.md
│   │   │   ├── 0879._Profitable_Schemes.md
│   │   │   ├── 0882._Reachable_Nodes_In_Subdivided_Graph.md
│   │   │   ├── 0887._Super_Egg_Drop.md
│   │   │   ├── 0891._Sum_of_Subsequence_Widths.md
│   │   │   ├── 0895._Maximum_Frequency_Stack.md
│   │   │   ├── 0899._Orderly_Queue.md
│   │   │   ├── 0902._Numbers_At_Most_N_Given_Digit_Set.md
│   │   │   ├── 0903._Valid_Permutations_for_DI_Sequence.md
│   │   │   ├── 0906._Super_Palindromes.md
│   │   │   ├── 0913._Cat_and_Mouse.md
│   │   │   ├── 0920._Number_of_Music_Playlists.md
│   │   │   ├── README.md
│   │   │   └── SUMMARY.md
│   │   ├── javascript/
│   │   │   ├── 0001._Two_Sum.md
│   │   │   ├── 0002._Add_Two_Numbers.md
│   │   │   ├── 0003._Longest_Substring_without_Repeating_Characters.md
│   │   │   ├── 0005._Longest_Palindromic_Substring.md
│   │   │   ├── 0007._Reverse_Integer.md
│   │   │   ├── 0008._String_to_Integer.md
│   │   │   ├── 0009._Palindrome_Number.md
│   │   │   ├── 0011._Container_With_Most_Water.md
│   │   │   ├── 0012._Integer_To_Roman.md
│   │   │   ├── 0013._Roman_To_Integer.md
│   │   │   ├── 0014._Longest_Common_Prefix.md
│   │   │   ├── 0015._Three_Sum.md
│   │   │   ├── 0016._3_Sum_Closest.md
│   │   │   ├── 0017._Letter_Combinations_Of_A_Phone_Number.md
│   │   │   ├── 0019._Remove_Nth_Node_From_End_Of_List.md
│   │   │   ├── 0020._Valid_Parentheses.md
│   │   │   ├── 0021._Merge_Two_Sorted_Lists.md
│   │   │   ├── 0022._Generate_Parentheses.md
│   │   │   ├── 0024._Swap_Nodes_In_Pairs.md
│   │   │   ├── 0027._Remove_Element.md
│   │   │   ├── 0031._Next_Permutation.md
│   │   │   ├── 0035._Search_Insert_Position.md
│   │   │   ├── 0053._Maximum_Subarray.md
│   │   │   ├── 0054._Spiral_Matrix.md
│   │   │   ├── 0055._Jump_Game.md
│   │   │   ├── 0056._Merge_Intervals.md
│   │   │   ├── 0058._Length_of_Last_Word.md
│   │   │   ├── 0061._Rotate_List.md
│   │   │   ├── 0062._Unique_Paths.md
│   │   │   ├── 0064._Minimum_Path_Sum.md
│   │   │   ├── 0066._Plus_One.md
│   │   │   ├── 0067._Add_Binary.md
│   │   │   ├── 0074._Search_a_2D_Matrix.md
│   │   │   ├── 0077._Combinations.md
│   │   │   ├── 0079._Search_Word.md
│   │   │   ├── 0083._Remove_Duplicates_From_Sorted_List.md
│   │   │   ├── 0094._Binary_Tree_Inorder_Traversal.md
│   │   │   ├── 0098._Validate_Binary_Search_Tree.md
│   │   │   ├── 0100._Same_Tree.md
│   │   │   ├── 0101._Symmetric_Tree.md
│   │   │   ├── 0104._Maximum_Depth_of_Binary_Tree.md
│   │   │   ├── 0106._Construct_Binary_Tree_From_Inorder_And_Postorder_Traversal.md
│   │   │   ├── 0120._Triangle.md
│   │   │   ├── 0121._Best_Time_To_Buy_And_Sell_Stock.md
│   │   │   ├── 0141._Linked_List_Cycle.md
│   │   │   ├── 0146._LRU_Cache.md
│   │   │   ├── 0167._Two_Sum_II_-_Input_array_is_sorted.md
│   │   │   ├── 0167._Two_Sum_II_Input_Array_is_Sorted.md
│   │   │   ├── 0171._Excel_Sheet_Column_Number.md
│   │   │   ├── 0179._Largest_Number.md
│   │   │   ├── 0198._House_Robber.md
│   │   │   ├── 0203._Remove_Linked_List_Elements.md
│   │   │   ├── 0206._Reverse_Linked_List.md
│   │   │   ├── 0209._Minimum_Size_Subarray_Sum.md
│   │   │   ├── 0258._Add_Digits.md
│   │   │   ├── 0320._Coin_Change.md
│   │   │   ├── 0347._Top_K_Frequent_Elements.md
│   │   │   ├── 0402._Remove_K_Digits.md
│   │   │   ├── 0406._Queue_Reconstruction_By_Height.md
│   │   │   ├── 0485._Max_Consecutive_Ones.md
│   │   │   ├── 0539._Minimum_Time_Difference.md
│   │   │   ├── 0581._Shortest_Unsorted_Continuous_Subarray.md
│   │   │   ├── 0881._Boats_to_Save_People.md
│   │   │   ├── 0997._Find_The_Town_Judge.md
│   │   │   ├── 1025._Divisor_Game.md
│   │   │   ├── 1130._Minimum_Cost_Tree_From_Leaf_Values.md
│   │   │   ├── 303._Range_Sum_Query_Immutable.md
│   │   │   ├── README.md
│   │   │   ├── SUMMARY.md
│   │   │   └── book.json
│   │   └── python/
│   │       ├── 001._two_sum.md
│   │       ├── 002._add_two_numbers.md
│   │       ├── 003._longest_substring_without_repeating_characters.md
│   │       ├── 004._median_of_two_sorted_arrays.md
│   │       ├── 005._longest_palindromic_substring.md
│   │       ├── 006._ZigZag_Conversion.md
│   │       ├── 007._Reverse_Integer.md
│   │       ├── 008._string_to_integer_(atoi).md
│   │       ├── 009._Palindrome_Number.md
│   │       ├── 010._regular_expression_matching.md
│   │       ├── 011._container_with_most_water.md
│   │       ├── 012._Integer_to_Roman.md
│   │       ├── 013._Roman_to_Integer.md
│   │       ├── 014._longest_common_prefix.md
│   │       ├── 015._3sum.md
│   │       ├── 016._3sum_closest.md
│   │       ├── 017._letter_combinations_of_a_phone_number.md
│   │       ├── 018._4sum.md
│   │       ├── 019._remove_nth_node_from_end_of_list.md
│   │       ├── 020._valid_parentheses.md
│   │       ├── 021._merge_two_sorted_lists.md
│   │       ├── 022._generate_parentheses.md
│   │       ├── 023._merge_k_sorted_lists.md
│   │       ├── 024._swap_nodes_in_pairs.md
│   │       ├── 026._Remove_Duplicates_from_Sorted_Array.md
│   │       ├── 027._Remove_Element.md
│   │       ├── 028._implement_strstr.md
│   │       ├── 030._Substring_with_Concatenation_of_All_Words.md
│   │       ├── 031._next_permutation.md
│   │       ├── 032._longest_valid_parentheses.md
│   │       ├── 033._search_in_rotated_sorted_array.md
│   │       ├── 034._Search_for_a_Range.md
│   │       ├── 035._search_insert_position.md
│   │       ├── 038._Count_and_Say.md
│   │       ├── 039._combination_sum.md
│   │       ├── 040._combination_sum_ii.md
│   │       ├── 041._First_Missing_Positive.md
│   │       ├── 042._trapping_rain_water.md
│   │       ├── 043._multiply_strings.md
│   │       ├── 044._wildcard_matching.md
│   │       ├── 045._Jump_Game_II.md
│   │       ├── 046._permutations.md
│   │       ├── 047._permutations_ii.md
│   │       ├── 048._rotate_image.md
│   │       ├── 049._group_anagrams_python.md
│   │       ├── 050._pow(x,_n).md
│   │       ├── 051._n-queens.md
│   │       ├── 052._n-queens_ii.md
│   │       ├── 053._maximum_subarray.md
│   │       ├── 054._spiral_matrix.md
│   │       ├── 055._jump_game.md
│   │       ├── 056._Merge_Intervals.md
│   │       ├── 058._length_of_last_word.md
│   │       ├── 059._spiral_matrix_ii.md
│   │       ├── 060._permutation_sequence.md
│   │       ├── 061._rotate_list.md
│   │       ├── 062._unique_paths.md
│   │       ├── 064._minimum_path_sum.md
│   │       ├── 065.unique_paths_ii.md
│   │       ├── 066._plus_one.md
│   │       ├── 067._add_binary.md
│   │       ├── 069._sqrt(x).md
│   │       ├── 070._Climbing_Stairs.md
│   │       ├── 072._edit_distance.md
│   │       ├── 073._Set_Matrix_Zeroes.md
│   │       ├── 074._search_a_2d_matrix.md
│   │       ├── 075._sort_colors.md
│   │       ├── 076._Minimum_Window_Substring.md
│   │       ├── 077._combinations.md
│   │       ├── 078._Subsets.md
│   │       ├── 079._word_search.md
│   │       ├── 082._remove_duplicates_from_sorted_list_ii.md
│   │       ├── 083._remove_duplicates_from_sorted_list.md
│   │       ├── 086._partition_list.md
│   │       ├── 088._merge_sorted_array.md
│   │       ├── 089._gray_code.md
│   │       ├── 090._subsets_ii.md
│   │       ├── 091._decode_ways.md
│   │       ├── 092._reverse_linked_list_ii.md
│   │       ├── 093._restore_ip_addresses.md
│   │       ├── 094._binary_tree_inorder_traversal.md
│   │       ├── 096._unique_binary_search_trees.md
│   │       ├── 098._validate_binary_search_tree.md
│   │       ├── 100._same_tree.md
│   │       ├── 101._symmetric_tree.md
│   │       ├── 102._binary_tree_level_order_traversal.md
│   │       ├── 103._binary_tree_zigzag_level_order_traversal.md
│   │       ├── 104._maximum_depth_of_binary_tree.md
│   │       ├── 105._construct_binary_tree_from_preorder_and_inorder_traversal.md
│   │       ├── 106._construct_binary_tree_from_inorder_and_postorder_traversal.md
│   │       ├── 107._binary_tree_level_order_traversal_ii.md
│   │       ├── 108._convert_sorted_array_to_binary_search_tree.md
│   │       ├── 109._convert_sorted_list_to_binary_search_tree.md
│   │       ├── 110._balanced_binary_tree.md
│   │       ├── 111._minimum_depth_of_binary_tree.md
│   │       ├── 112._path_sum.md
│   │       ├── 113._path_sum_ii.md
│   │       ├── 114._flatten_binary_tree_to_linked_list.md
│   │       ├── 116._populating_next_right_pointers_in_each_node.md
│   │       ├── 117._Populating_Next_Right_Pointers_in_Each_Node_II.md
│   │       ├── 118._pascal's_triangle.md
│   │       ├── 119._Pascal's_Triangle_II.md
│   │       ├── 120._Triangle.md
│   │       ├── 121._Best_Time_to_Buy_and_Sell_Stock.md
│   │       ├── 124._Binary_Tree_Maximum_Path_Sum.md
│   │       ├── 125._valid_palindrome.md
│   │       ├── 126._Word_Ladder_II.md
│   │       ├── 127._word_ladder.md
│   │       ├── 128._Longest_Consecutive_Sequence.md
│   │       ├── 129._sum_root_to_leaf_numbers.md
│   │       ├── 130._surrounded_regions.md
│   │       ├── 131._palindrome_partitioning.md
│   │       ├── 133._clone_graph.md
│   │       ├── 136._single_number.md
│   │       ├── 139._word_break.md
│   │       ├── 140._word_break_ii.md
│   │       ├── 141._linked_list_cycle.md
│   │       ├── 142_Linked_List_Cycle_II.md
│   │       ├── 143._reorder_list.md
│   │       ├── 144._binary_tree_preorder_traversal.md
│   │       ├── 145._binary_tree_postorder_traversal.md
│   │       ├── 147._insertion_sort_list.md
│   │       ├── 148._sort_list.md
│   │       ├── 150._evaluate_reverse_polish_notation.md
│   │       ├── 151._reverse_words_in_a_string.md
│   │       ├── 152._maximum_product_subarray.md
│   │       ├── 153._find_minimum_in_rotated_sorted_array.md
│   │       ├── 155._min_stack.md
│   │       ├── 157._Read_N_Characters_Given_Read4.md
│   │       ├── 158._Read_N_Characters_Given_Read4_II_-_Call_multiple_times.md
│   │       ├── 159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md
│   │       ├── 160._intersection_of_two_linked_lists.md
│   │       ├── 162._find_peak_element.md
│   │       ├── 165._compare_version_numbers.md
│   │       ├── 166._Fraction_to_Recurring_Decimal.md
│   │       ├── 167._two_sum_ii_-_input_array_is_sorted.md
│   │       ├── 168._excel_sheet_column_title.md
│   │       ├── 169._majority_element.md
│   │       ├── 171._excel_sheet_column_number.md
│   │       ├── 173._binary_search_tree_iterator.md
│   │       ├── 179._Largest_Number.md
│   │       ├── 182._duplicate_emails.md
│   │       ├── 189._rotate_array.md
│   │       ├── 191._number_of_1_bits.md
│   │       ├── 198._house_robber.md
│   │       ├── 199._binary_tree_right_side_view.md
│   │       ├── 200._number_of_islands.md
│   │       ├── 203._remove_linked_list_elements.md
│   │       ├── 204._count_primes.md
│   │       ├── 205._isomorphic_strings.md
│   │       ├── 206._reverse_linked_list.md
│   │       ├── 207._course_schedule.md
│   │       ├── 208._implement_trie_(prefix_tree).md
│   │       ├── 210._course_schedule_ii.md
│   │       ├── 211._Add_and_Search_Word_-_Data_structure_design.md
│   │       ├── 213._house_robber_ii.md
│   │       ├── 216._combination_sum_iii.md
│   │       ├── 217._contains_duplicate.md
│   │       ├── 218._The_Skyline_Problem.md
│   │       ├── 219._contains_duplicate_ii.md
│   │       ├── 221._maximal_square.md
│   │       ├── 222._count_complete_tree_nodes.md
│   │       ├── 223._rectangle_area.md
│   │       ├── 224._Basic_Calculator.md
│   │       ├── 225._implement_stack_using_queues.md
│   │       ├── 226._invert_binary_tree.md
│   │       ├── 227._basic_calculator_ii.md
│   │       ├── 228._summary_ranges.md
│   │       ├── 229._majority_element_ii.md
│   │       ├── 230._kth_smallest_element_in_a_bst.md
│   │       ├── 231._Power_of_Two.md
│   │       ├── 232._implement_queue_using_stacks.md
│   │       ├── 234._palindrome_linked_list.md
│   │       ├── 235._lowest_common_ancestor_of_a_binary_search_tree.md
│   │       ├── 236._lowest_common_ancestor_of_a_binary_tree.md
│   │       ├── 237._delete_node_in_a_linked_list.md
│   │       ├── 238._product_of_array_except_self.md
│   │       ├── 240._search_a_2d_matrix_ii.md
│   │       ├── 242._valid_anagram.md
│   │       ├── 249._Group_Shifted_Strings.md
│   │       ├── 252._Meeting_Rooms.md
│   │       ├── 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md
│   │       ├── 256._Paint_House.md
│   │       ├── 257._binary_tree_paths.md
│   │       ├── 258._Add_Digits.md
│   │       ├── 261._Graph_Valid_Tree.md
│   │       ├── 263._ugly_number.md
│   │       ├── 264._ugly_number_ii.md
│   │       ├── 265._Paint_House_II.md
│   │       ├── 266._Palindrome_Permutation.md
│   │       ├── 267._Palindrome_Permutation_II.md
│   │       ├── 268._missing_number.md
│   │       ├── 270._Closest_Binary_Search_Tree_Value.md
│   │       ├── 276._Paint_Fence.md
│   │       ├── 277._Find_the_Celebrity.md
│   │       ├── 278._First_Bad_Version.md
│   │       ├── 279._perfect_squares.md
│   │       ├── 280._Wiggle_Sort.md
│   │       ├── 283._move_zeroes.md
│   │       ├── 285._inorder_successor_in_bst.md
│   │       ├── 286._Walls_and_Gates.md
│   │       ├── 287._Find_the_Duplicate_Number.md
│   │       ├── 289._game_of_life.md
│   │       ├── 290._word_pattern.md
│   │       ├── 292._nim_game.md
│   │       ├── 293._Flip_Game.md
│   │       ├── 296._Best_Meeting_Point.md
│   │       ├── 298._Binary_Tree_Longest_Consecutive_Sequence.md
│   │       ├── 299._bulls_and_cows.md
│   │       ├── 300._longest_increasing_subsequence.md
│   │       ├── 303._range_sum_query_-_immutable.md
│   │       ├── 316._Remove_Duplicate_Letters.md
│   │       ├── 319._Bulb_Switcher.md
│   │       ├── 322._Coin_Change.md
│   │       ├── 323._number_of_connected_components_in_an_undirected_graph.md
│   │       ├── 324._Wiggle_Sort_II.md
│   │       ├── 326._power_of_three.md
│   │       ├── 328._odd_even_linked_list.md
│   │       ├── 334._increasing_triplet_subsequence.md
│   │       ├── 337._house_robber_iii.md
│   │       ├── 338._Counting_Bits.md
│   │       ├── 339._Nested_List_Weight_Sum.md
│   │       ├── 341._Flatten_Nested_List_Iterator.md
│   │       ├── 342._Power_of_Four.md
│   │       ├── 344._reverse_string.md
│   │       ├── 345._Reverse_Vowels_of_a_String.md
│   │       ├── 349._intersection_of_two_arrays.md
│   │       ├── 350._intersection_of_two_arrays_ii.md
│   │       ├── 353._Design_Snake_Game.md
│   │       ├── 361._Bomb_Enemy.md
│   │       ├── 364._Nested_List_Weight_Sum_II.md
│   │       ├── 366._Find_Leaves_of_Binary_Tree.md
│   │       ├── 367._valid_perfect_square.md
│   │       ├── 369._Plus_One_Linked_List.md
│   │       ├── 371._sum_of_two_integers.md
│   │       ├── 374._Guess_Number_Higher_or_Lower.md
│   │       ├── 377._combination_sum_iv.md
│   │       ├── 378._kth_smallest_element_in_a_sorted_matrix.md
│   │       ├── 380._Insert_Delete_GetRandom_O(1).md
│   │       ├── 381._Insert_Delete_GetRandom_O(1)_-_Duplicates_allowed.md
│   │       ├── 382._linked_list_random_node.md
│   │       ├── 383._ransom_note.md
│   │       ├── 384._Shuffle_an_Array.md
│   │       ├── 386._Lexicographical_Numbers.md
│   │       ├── 387._first_unique_character_in_a_string.md
│   │       ├── 388._Longest_Absolute_File_Path.md
│   │       ├── 389._find_the_difference.md
│   │       ├── 392._is_subsequence.md
│   │       ├── 394._decode_string.md
│   │       ├── 400._Nth_Digit.md
│   │       ├── 401._binary_watch.md
│   │       ├── 404._sum_of_left_leaves.md
│   │       ├── 405._Convert_a_Number_to_Hexadecimal.md
│   │       ├── 406._Queue_Reconstruction_by_Height.md
│   │       ├── 412._fizz_buzz.md
│   │       ├── 413._Arithmetic_Slices.md
│   │       ├── 414._third_maximum_number.md
│   │       ├── 415._add_strings.md
│   │       ├── 416._Partition_Equal_Subset_Sum.md
│   │       ├── 421._Maximum_XOR_of_Two_Numbers_in_an_Array.md
│   │       ├── 422._Valid_Word_Square.md
│   │       ├── 434._number_of_segments_in_a_string.md
│   │       ├── 435._Non-overlapping_Intervals.md
│   │       ├── 437._path_sum_iii.md
│   │       ├── 438._Find_All_Anagrams_in_a_String.md
│   │       ├── 439._Ternary_Expression_Parser.md
│   │       ├── 441._arranging_coins.md
│   │       ├── 448._Find_All_Numbers_Disappeared_in_an_Array.md
│   │       ├── 450._Delete_Node_in_a_BST.md
│   │       ├── 453._Minimum_Moves_to_Equal_Array_Elements.md
│   │       ├── 459._Repeated_Substring_Pattern.md
│   │       ├── 461._Hamming_Distance.md
│   │       ├── 463._Island_Perimeter.md
│   │       ├── 467._Unique_Substrings_in_Wraparound_String.md
│   │       ├── 469._Convex_Polygon.md
│   │       ├── 476._Number_Complement.md
│   │       ├── 477._Total_Hamming_Distance.md
│   │       ├── 485._Max_Consecutive_Ones.md
│   │       ├── 494._Target_Sum.md
│   │       ├── 536._Construct_Binary_Tree_from_String.md
│   │       ├── 587._Erect_the_Fence.md
│   │       ├── 599._Minimum_Index_Sum_of_Two_Lists.md
│   │       ├── 606._Construct_String_from_Binary_Tree.md
│   │       ├── 611._Valid_Triangle_Number.md
│   │       ├── 646._Maximum_Length_of_Pair_Chain.md
│   │       ├── 647._Palindromic_Substrings.md
│   │       ├── 657._Judge_Route_Circle.md
│   │       ├── 665._Non-decreasing_Array.md
│   │       ├── 672._Bulb_Switcher_II.md
│   │       ├── 681._Next_Closest_Time.md
│   │       ├── 682._Baseball_Game.md
│   │       ├── 685._Redundant_Connection_II.md
│   │       ├── 687._Longest_Univalue_Path.md
│   │       ├── 693._Binary_Number_with_Alternating_Bits.md
│   │       ├── 701._Insert_into_a_Binary_Search_Tree.md
│   │       ├── 707._Design_Linked_List.md
│   │       ├── 740._delete_and_earn.md
│   │       ├── 760._Find_Anagram_Mappings.md
│   │       ├── 774._Minimize_Max_Distance_to_Gas_Station.md
│   │       ├── 777._Swap_Adjacent_in_LR_String.md
│   │       ├── 844._Backspace_String_Compare.md
│   │       ├── README.md
│   │       └── SUMMARY.md
│   └── think-dast-zh/
│       ├── 0.md
│       ├── 1.md
│       ├── 10.md
│       ├── 11.md
│       ├── 12.md
│       ├── 13.md
│       ├── 14.md
│       ├── 15.md
│       ├── 16.md
│       ├── 17.md
│       ├── 2.md
│       ├── 3.md
│       ├── 4.md
│       ├── 5.md
│       ├── 6.md
│       ├── 7.md
│       ├── 8.md
│       ├── 9.md
│       ├── README.md
│       └── SUMMARY.md
├── index.html
└── update.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# dotenv
.env

# virtualenv
.venv
venv/
ENV/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.DS_Store

# gitbook
_book

# node.js
node_modules

# windows
Thumbs.db

# word
~$*.docx
~$*.doc


================================================
FILE: .nojekyll
================================================


================================================
FILE: 404.html
================================================
---
permalink: /404.html
---
<script>window.location.href = '/';</script>


================================================
FILE: CNAME
================================================
algo.apachecn.org

================================================
FILE: Dockerfile
================================================
FROM httpd:2.4
COPY ./ /usr/local/apache2/htdocs/

================================================
FILE: NAV.md
================================================
+   编程
    +   [JavaTPoint 编程语言中文教程📚](https://apachecn.github.io/javatpoint-prog-zh)
    +   [JavaTPoint .NET 中文教程📚](https://apachecn.github.io/javatpoint-dotnet-zh)
    +   [JavaTPoint Java 中文教程📚](https://apachecn.github.io/javatpoint-java-zh)
    +   [JavaTPoint Python 中文教程📚](https://apachecn.github.io/javatpoint-python-zh)
    +   [GeeksForGeeks 编程语言杂项中文教程📚](https://apachecn.github.io/geeksforgeeks-lang-misc-zh)
    +   [GeeksForGeeks C# 中文教程📚](https://apachecn.github.io/geeksforgeeks-csharp-zh)
    +   [GeeksForGeeks Scala 中文教程📚](https://apachecn.github.io/geeksforgeeks-scala-zh)
    +   [GeeksForGeeks Python 中文教程📚](https://apachecn.github.io/geeksforgeeks-python-zh)
    +   [GeeksForGeeks C/C++ 中文教程📚](https://apachecn.github.io/geeksforgeeks-c-cpp-zh)
    +   [GeeksForGeeks Java 中文教程📚](https://apachecn.github.io/geeksforgeeks-java-zh)
    +   [GeeksForGeeks JavaScript 中文教程📚](https://apachecn.github.io/geeksforgeeks-js-zh)
    +   [ApacheCN C# 译文集📚](https://apachecn.github.io/apachecn-csharp-zh)
    +   [ApacheCN C# 译文集(二)📚](https://apachecn.github.io/apachecn-csharp-zh-pt2)
    +   [ApacheCN C# 译文集(三)📚](https://apachecn.github.io/apachecn-csharp-zh-pt3)
    +   [ApacheCN C# 译文集(四)📚](https://apachecn.github.io/apachecn-csharp-zh-pt4)
    +   [ApacheCN Golang 译文集📚](https://apachecn.github.io/apachecn-golang-zh)
    +   [ApacheCN Golang 译文集(二)📚](https://apachecn.github.io/apachecn-golang-zh-pt2)
    +   [ApacheCN C/C++ 译文集📚](https://apachecn.github.io/apachecn-c-cpp-zh)
    +   [ApacheCN C/C++ 译文集(二)📚](https://apachecn.github.io/apachecn-c-cpp-zh-pt2)
    +   [ApacheCN C/C++ 译文集(三)📚](https://apachecn.github.io/apachecn-c-cpp-zh-pt3)
    +   [ApacheCN Java 译文集📚](https://apachecn.github.io/apachecn-java-zh)
    +   [ApacheCN Java 译文集(二)📚](https://apachecn.github.io/apachecn-java-zh-pt2)
    +   [ApacheCN Java 译文集(三)📚](https://apachecn.github.io/apachecn-java-zh-pt3)
    +   [ApacheCN JavaScript 译文集📚](https://apachecn.github.io/apachecn-js-zh)
    +   [ApacheCN JavaScript 译文集(二)📚](https://apachecn.github.io/apachecn-js-zh-pt2)
    +   [ApacheCN JavaScript 译文集(三)📚](https://apachecn.github.io/apachecn-js-zh-pt3)
    +   [ApacheCN JavaScript 译文集(四)📚](https://apachecn.github.io/apachecn-js-zh-pt4)
    +   [ApacheCN Python 译文集📚](https://apachecn.github.io/apachecn-python-zh)
    +   [ApacheCN Python 译文集(二)📚](https://apachecn.github.io/apachecn-python-zh-pt2)
    +   [ApacheCN Python 译文集(三)📚](https://apachecn.github.io/apachecn-python-zh-pt3)
    +   [ApacheCN Python 译文集(四)📚](https://apachecn.github.io/apachecn-python-zh-pt4)
    +   [ApacheCN Ruby 译文集📚](https://apachecn.github.io/apachecn-ruby-zh)
    +   [BeginnersBook 中文系列教程📚](https://apachecn.github.io/beginnersbook-zh)
    +   [JavaScript 编程精解 中文第三版](https://apachecn.github.io/eloquent-js-3e-zh)
    +   [Guru99 中文系列教程📚🚧](https://apachecn.github.io/guru99-zh)
    +   [HowToDoInJava 中文系列教程📚](https://apachecn.github.io/howtodoinjava-zh)
    +   [OverIQ 中文系列教程📚](https://apachecn.github.io/overiq-zh)
    +   [LearnETutroials 中文系列教程📚](https://apachecn.github.io/learnetutorials-zh)
    +   [StudyTonight 中文系列教程📚](https://apachecn.github.io/studytonight-zh)
    +   [TutorialGateway 中文系列教程📚](https://apachecn.github.io/tutorialgateway-zh)
    +   [TutorialGateway BI 中文系列教程📚](https://apachecn.github.io/tutorialgateway-bi-zh)
    +   [TutorialsTeacher 中文系列教程📚](https://apachecn.github.io/tutorialsteacher-zh)
    +   [通过示例学 Golang 2020 中文版](https://apachecn.github.io/golang-by-example-2020-zh)
    +   [写给不耐烦程序员的 JavaScript🚧](https://apachecn.github.io/impatient-js-zh)
    +   [JavaBeginnersTutorial 中文系列教程📚](https://apachecn.github.io/jbt-zh)
    +   [JavaTutorialNetwork 中文系列教程📚](https://apachecn.github.io/jtn-zh)
    +   [笨办法学C 中文版](https://apachecn.github.io/lcthw-zh)
    +   [笨办法学 Python · 续 中文版](https://apachecn.github.io/lmpythw-zh)
    +   [Programiz 中文系列教程📚](https://apachecn.github.io/programiz-zh)
    +   [PythonBasics 中文系列教程📚](https://apachecn.github.io/pythonbasics-zh)
    +   [PythonGuru 中文系列教程📚](https://apachecn.github.io/pythonguru-zh)
    +   [PythonSpot 中文系列教程📚](https://apachecn.github.io/pythonspot-zh)
    +   [Think Python](https://apachecn.github.io/think-py-2e-zh)
    +   [ZetCode 中文系列教程📚](https://apachecn.github.io/zetcode-zh)
+   前端
    +   [JavaTPoint 移动开发中文教程📚](https://apachecn.github.io/javatpoint-mobi-zh)
    +   [GeeksForGeeks Web 杂项中文教程📚](https://apachecn.github.io/geeksforgeeks-web-misc-zh)
    +   [GeeksForGeeks Angular/Vue/React 中文教程📚](https://apachecn.github.io/geeksforgeeks-ng-vue-react-zh)
    +   [GeeksForGeeks jQuery 中文教程📚](https://apachecn.github.io/geeksforgeeks-jquery-zh)
    +   [GeeksForGeeks CSS 中文教程📚](https://apachecn.github.io/geeksforgeeks-css-zh)
    +   [GeeksForGeeks HTML 中文教程📚](https://apachecn.github.io/geeksforgeeks-html-zh)
    +   [ApacheCN Vue 译文集📚](https://apachecn.github.io/apachecn-vue-zh)
    +   [ApacheCN Angular 译文集📚](https://apachecn.github.io/apachecn-angular-zh)
    +   [ApacheCN React 译文集📚](https://apachecn.github.io/apachecn-react-zh)
    +   [ApacheCN jQuery 译文集📚](https://apachecn.github.io/apachecn-jquery-zh)
    +   [ApacheCN jQuery 译文集(二)📚](https://apachecn.github.io/apachecn-jquery-zh-pt2)
+   后端/大数据
    +   [JavaTPoint 大数据中文教程📚](https://apachecn.github.io/javatpoint-bigdata-zh)
    +   [JavaTPoint Web 开发中文教程📚](https://apachecn.github.io/javatpoint-web-zh)
    +   [JavaTPoint 数据库中文教程📚](https://apachecn.github.io/javatpoint-db-zh)
    +   [JavaTPoint PHP 中文教程📚](https://apachecn.github.io/javatpoint-php-zh)
    +   [GeeksForGeeks ASP 中文教程📚](https://apachecn.github.io/geeksforgeeks-asp-zh)
    +   [GeeksForGeeks SQL 中文教程📚](https://apachecn.github.io/geeksforgeeks-sql-zh)
    +   [GeeksForGeeks NodeJS 中文教程📚](https://apachecn.github.io/geeksforgeeks-nodejs-zh)
    +   [GeeksForGeeks PHP 中文教程📚](https://apachecn.github.io/geeksforgeeks-php-zh)
    +   [ApacheCN 数据库译文集📚](https://apachecn.github.io/apachecn-db-zh)
    +   [ApacheCN 数据库译文集(二)📚](https://apachecn.github.io/apachecn-db-zh-pt2)
    +   [ApacheCN Python Web 译文集📚](https://apachecn.github.io/apachecn-pythonweb-zh)
    +   [ApacheCN Python Web 译文集(二)📚](https://apachecn.github.io/apachecn-pythonweb-zh-pt2)
    +   [ApacheCN Asp.NET 译文集📚](https://apachecn.github.io/apachecn-asp-dotnet-zh)
    +   [ApacheCN Asp.NET 译文集(二)📚](https://apachecn.github.io/apachecn-asp-dotnet-zh-pt2)
    +   [ApacheCN Asp.NET 译文集(三)📚](https://apachecn.github.io/apachecn-asp-dotnet-zh-pt3)
    +   [ApacheCN Asp.NET 译文集(四)📚](https://apachecn.github.io/apachecn-asp-dotnet-zh-pt4)
    +   [ApacheCN NodeJS 译文集📚](https://apachecn.github.io/apachecn-node-zh)
    +   [ApacheCN NodeJS 译文集(二)📚](https://apachecn.github.io/apachecn-node-zh-pt2)
    +   [ApacheCN PHP 译文集📚](https://apachecn.github.io/apachecn-php-zh)
    +   [ApacheCN PHP 译文集(二)📚](https://apachecn.github.io/apachecn-php-zh-pt2)
    +   [ApacheCN 大数据译文集(二)📚](https://apachecn.github.io/apachecn-bigdata-zh-pt2)
    +   [ApacheCN 大数据译文集(三)📚](https://apachecn.github.io/apachecn-bigdata-zh-pt3)
    +   [ApacheCN 大数据译文集📚](https://apachecn.github.io/apachecn-bigdata-zh)
    +   [ApacheCN Java Web 译文集📚](https://apachecn.github.io/apachecn-javaweb-zh)
    +   [ApacheCN Java Web 译文集(二)📚](https://apachecn.github.io/apachecn-javaweb-zh-pt2)
    +   [Airflow 中文文档](https://apachecn.github.io/airflow-doc-zh)
    +   [Elasticsearch 5.4 中文文档](https://apachecn.github.io/elasticsearch-doc-zh)
    +   [Flink 中文文档](https://apachecn.github.io/flink-doc-zh)
    +   [HBase™ 中文参考指南 3.0🚧](https://apachecn.github.io/hbase-doc-zh)
    +   [HighScalability 中文示例📚🚧](https://apachecn.github.io/highscalability-examples-zh)
    +   [Kibana 5.2 中文文档](https://apachecn.github.io/kibana-doc-zh)
    +   [Kudu 1.4.0 中文文档](https://apachecn.github.io/kudu-doc-zh)
    +   [Apache Spark 官方文档中文版](https://apachecn.github.io/spark-doc-zh)
    +   [Apache Kafka 官方文档中文版](https://apachecn.github.io/kafka-site-zh)
    +   [Spring Boot 1.5.2 中文文档](https://apachecn.github.io/spring-boot-doc-zh)
    +   [Storm 1.1.0 中文文档](https://apachecn.github.io/storm-doc-zh)
    +   [Zeppelin 0.7.2 中文文档](https://apachecn.github.io/zeppelin-doc-zh)
+   工具
    +   [JavaTPoint 实用工具中文教程📚](https://apachecn.github.io/javatpoint-util-zh)
    +   [ApacheCN DevOps 译文集📚](https://apachecn.github.io/apachecn-devops-zh)
    +   [ApacheCN DevOps 译文集(二)📚](https://apachecn.github.io/apachecn-devops-zh-pt2)
    +   [ApacheCN DevOps 译文集(三)📚](https://apachecn.github.io/apachecn-devops-zh-pt3)
    +   [ApacheCN DevOps 译文集(四)📚](https://apachecn.github.io/apachecn-devops-zh-pt4)
    +   [ApacheCN DevOps 译文集(五)📚](https://apachecn.github.io/apachecn-devops-zh-pt5)
    +   [ApacheCN Linux 译文集📚](https://apachecn.github.io/apachecn-linux-zh)
    +   [ApacheCN Linux 译文集(二)📚](https://apachecn.github.io/apachecn-linux-zh-pt2)
    +   [ApacheCN Linux 译文集(三)📚](https://apachecn.github.io/apachecn-linux-zh-pt3)
    +   [Cython 3.0 中文文档🚧](https://apachecn.github.io/cython-doc-zh)
    +   [Git 中文参考🚧](https://apachecn.github.io/git-doc-zh)
    +   [Gitlab 中文文档🚧](https://apachecn.github.io/gitlab-doc-zh)
    +   [笨办法学 Linux 中文版](https://apachecn.github.io/llthw-zh)
    +   [Numba 0.44 中文文档🚧](https://apachecn.github.io/numba-doc-zh)
    +   [PyQt4 中文文档🚧](https://apachecn.github.io/pyqt4-doc-zh)
    +   [Scrapy 1.6 中文文档](https://apachecn.github.io/scrapy-doc-zh)
+   数据科学
    +   [ApacheCN 数据科学译文集📚](https://apachecn.github.io/apachecn-ds-zh)
    +   [ApacheCN 数据科学译文集(二)📚](https://apachecn.github.io/apachecn-ds-zh-pt2)
    +   [ApacheCN 数据科学译文集(三)📚](https://apachecn.github.io/apachecn-ds-zh-pt3)
    +   [ApacheCN 数据科学译文集📚](https://apachecn.github.io/apachecn-ds-zh)
    +   [MIT 18.03 面向初学者的微积分🚧](https://apachecn.github.io/calc4b-zh)
    +   [UCB Data8 计算与推断思维](https://apachecn.github.io/data8-textbook-zh)
    +   [数据可视化的基础知识](https://apachecn.github.io/dataviz-zh)
    +   [数据科学和人工智能技术笔记](https://apachecn.github.io/ds-ai-tech-notes)
    +   [数据科学 IPython 笔记本📚](https://apachecn.github.io/ds-ipynb-zh)
    +   [UCB DS100 数据科学的原理与技巧🚧](https://apachecn.github.io/ds100-textbook-zh)
    +   [ApacheCN 数据科学和人工智能知识库](https://apachecn.github.io/dsai-wiki)
    +   [Matplotlib 用户指南](https://apachecn.github.io/matplotlib-doc-zh)
    +   [MIT 18.06 线性代数笔记](https://apachecn.github.io/mit-18.06-linalg-notes)
    +   [利用 Python 进行数据分析 · 第 2 版](https://apachecn.github.io/pyda-2e-zh)
    +   [QuantLearning](https://apachecn.github.io/quant-learning)
    +   [seaborn 0.9 中文文档](https://apachecn.github.io/seaborn-doc-zh)
    +   [社交媒体挖掘 - 翻译版](https://apachecn.github.io/socialmediamining-zh)
    +   [斯坦福 Stats60 21 世纪的统计思维🚧](https://apachecn.github.io/stats-thinking-21-zh)
    +   [复杂性思维 中文第二版](https://apachecn.github.io/think-comp-2e-zh)
    +   [PyMiner 开发者指南](https://apachecn.github.io/pyminer-dev-guide)
+   人工智能
    +   [JavaTPoint 数据科学与人工智能中文教程📚](https://apachecn.github.io/javatpoint-dsai-zh)
    +   [GeeksForGeeks 人工智能中文教程📚](https://apachecn.github.io/geeksforgeeks-ai-zh)
    +   [AILearning📚](https://apachecn.github.io/ailearning)
    +   [ApacheCN 计算机视觉译文集📚](https://apachecn.github.io/apachecn-cv-zh)
    +   [ApacheCN 计算机视觉译文集(二)📚](https://apachecn.github.io/apachecn-cv-zh-pt2)
    +   [ApacheCN 深度学习译文集📚](https://apachecn.github.io/apachecn-dl-zh)
    +   [ApacheCN 深度学习译文集(二)📚](https://apachecn.github.io/apachecn-dl-zh-pt2)
    +   [ApacheCN 深度学习译文集(三)📚](https://apachecn.github.io/apachecn-dl-zh-pt3)
    +   [ApacheCN 机器学习译文集📚](https://apachecn.github.io/apachecn-ml-zh)
    +   [ApacheCN 机器学习译文集(二)📚](https://apachecn.github.io/apachecn-ml-zh-pt2)
    +   [ApacheCN 机器学习译文集(三)📚](https://apachecn.github.io/apachecn-ml-zh-pt3)
    +   [FastText 中文文档](https://apachecn.github.io/fasttext-doc-zh)
    +   [面向机器学习的特征工程](https://apachecn.github.io/fe4ml-zh)
    +   [Gensim 中文文档](https://apachecn.github.io/gensim-doc-zh)
    +   [Sklearn 与 TensorFlow 机器学习实用指南第二版](https://apachecn.github.io/hands-on-ml-2e-zh)
    +   [LightGBM 中文文档](https://apachecn.github.io/lightgbm-doc-zh)
    +   [Machine Learning Mastery 博客文章翻译📚🚧](https://apachecn.github.io/ml-mastery-zh)
    +   [Machine Learning Mastery 博客文章翻译(二)📚🚧](https://apachecn.github.io/ml-mastery-zh-pt2)
    +   [Python 自然语言处理 第二版](https://apachecn.github.io/nlp-py-2e-zh)
    +   [PyTorch 自然语言处理](https://apachecn.github.io/nlp-pytorch-zh)
    +   [台湾大学林轩田机器学习笔记](https://apachecn.github.io/ntu-hsuantienlin-ml)
    +   [OpenCV 中文文档 4.0.0](https://apachecn.github.io/opencv-doc-zh)
    +   [PythonProgramming.net 系列教程📚](https://apachecn.github.io/python-programming-net-zh)
    +   [PyTorch 中文教程](https://apachecn.github.io/pytorch-doc-zh)
    +   [scikit-learn (sklearn) 官方文档中文版](https://apachecn.github.io/sklearn-doc-zh)
    +   [XGBoost 中文文档](https://apachecn.github.io/xgboost-doc-zh)
+   计算机科学
    +   [JavaTPoint 计算机科学中文教程📚](https://apachecn.github.io/javatpoint-cs-zh)
    +   [ApacheCN 数据结构与算法译文集📚](https://apachecn.github.io/apachecn-algo-zh)
    +   [ApacheCN 计算机系统译文集📚](https://apachecn.github.io/apachecn-sys-zh)
    +   [NUS CS1101s SICP JavaScript 描述🚧](https://apachecn.github.io/sicp-js-zh)
    +   [UCB CS61a SICP Python 描述](https://apachecn.github.io/sicp-py-zh)
    +   [数据结构思维中文版](https://apachecn.github.io/think-dast-zh)
    +   [UIUC CS241 系统编程中文讲义🚧](https://apachecn.github.io/uiuc-cs241-notes-zh)
+   安全
    +   [ApacheCN Kali Linux 译文集📚](https://apachecn.github.io/apachecn-kali-zh)
    +   [ApacheCN 网络安全译文集📚](https://apachecn.github.io/apachecn-sec-zh)
    +   [ApacheCN 网络安全译文集(二)📚](https://apachecn.github.io/apachecn-sec-zh-pt2)
    +   [SecLearning——零组文库备份📚](https://apachecn.github.io/sec-learning)
    +   [ApacheCN 安全知识库📚](https://apachecn.github.io/sec-wiki)
    +   [Web Hacking 101 中文版](https://apachecn.github.io/web-hacking-101-zh)
+   其它
    +   [生化环材劝退文集](https://apachecn.github.io/bio-chem-env-mat-discourage)
    +   [5 分钟商学院精细笔记](https://apachecn.github.io/business-5min-notes)
    +   [iBooker 布客](https://apachecn.github.io/home)
    +   [iBooker 布客老实人报](https://apachecn.github.io/ibooker-plain-dealer)
    +   [使用 Qiskit 学习量子计算 - 翻译版](https://apachecn.github.io/lqcuq-zh)
    +   [原则 · 中文版](https://apachecn.github.io/principles-zh)
    +   [斯坦福 CS183 & YC 创业课系列中文笔记📚](https://apachecn.github.io/stanford-cs183-notes)
    +   [iBooker 团队知识库📚](https://apachecn.github.io/team-wiki)
    +   [ApacheCN 技术评论](https://apachecn.github.io/tech-review)
    +   [通往财富自由之路精细笔记](https://apachecn.github.io/the-way-to-wealth-freedom-notes)


================================================
FILE: README.md
================================================
# ApacheCN 数据结构与算法译文集

> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 
> 程序员的双手是魔术师的双手,他们把枯燥无味的代码变成了丰富多彩的软件。——《疯狂的程序员》

* [在线阅读](https://algo.apachecn.org)
* [在线阅读(Gitee)](https://apachecn.gitee.io/apachecn-algo-zh/)
* [ApacheCN 学习资源](http://docs.apachecn.org/)

## 目录

+   [数据结构思维中文版](docs/think-dast-zh/SUMMARY.md)
+   [Leetcode C++ 题解](docs/leetcode/cpp/SUMMARY.md)
+   [Leetcode Java 题解](docs/leetcode/java/SUMMARY.md)
+   [Leetcode JavaScript 题解](docs/leetcode/javascript/SUMMARY.md)
+   [Leetcode Python 题解](docs/leetcode/python/SUMMARY.md)
+   [剑指 Offer Java 题解](docs/jianzhioffer/java/SUMMARY.md)

## 贡献指南

为了不断改进翻译质量,我们特此启动了【翻译、校对、笔记整理活动】,开设了多个校对项目。贡献者校对一章之后可以领取千字2\~4元的奖励。进行中的校对活动请见[活动列表](https://home.apachecn.org/#/docs/activity/docs-activity)。更多详情请联系飞龙(Q562826179,V:wizardforcel)。

## 联系方式

### 负责人

* [飞龙](https://github.com/wizardforcel): 562826179

### 其他

*   在我们的 [apachecn/apachecn-algo-zh](https://github.com/apachecn/apachecn-algo-zh) github 上提 issue.
*   发邮件到 Email: `apachecn@163.com`.
*   在我们的 [组织学习交流群](http://www.apachecn.org/organization/348.html) 中联系群主/管理员即可.

## 下载

### Docker

```
docker pull apachecn0/apachecn-algo-zh
docker run -tid -p <port>:80 apachecn0/apachecn-algo-zh
# 访问 http://localhost:{port} 查看文档
```

### PYPI

```
pip install apachecn-algo-zh
apachecn-algo-zh <port>
# 访问 http://localhost:{port} 查看文档
```

### NPM

```
npm install -g apachecn-algo-zh
apachecn-algo-zh <port>
# 访问 http://localhost:{port} 查看文档
```

## 赞助我们

![](http://data.apachecn.org/img/about/donate.jpg)


================================================
FILE: SUMMARY.md
================================================
+   [数据结构思维中文版](docs/think-dast-zh/README.md)
    +   [前言](docs/think-dast-zh/0.md)
    +   [第一章 接口](docs/think-dast-zh/1.md)
    +   [第二章 算法分析](docs/think-dast-zh/2.md)
    +   [第三章 `ArrayList`](docs/think-dast-zh/3.md)
    +   [第四章 `LinkedList`](docs/think-dast-zh/4.md)
    +   [第五章 双链表](docs/think-dast-zh/5.md)
    +   [第六章 树的遍历](docs/think-dast-zh/6.md)
    +   [第七章 到达哲学](docs/think-dast-zh/7.md)
    +   [第八章 索引器](docs/think-dast-zh/8.md)
    +   [第九章 `Map`接口](docs/think-dast-zh/9.md)
    +   [第十章 哈希](docs/think-dast-zh/10.md)
    +   [第十一章 `HashMap`](docs/think-dast-zh/11.md)
    +   [第十二章 `TreeMap`](docs/think-dast-zh/12.md)
    +   [第十三章 二叉搜索树](docs/think-dast-zh/13.md)
    +   [第十四章 持久化](docs/think-dast-zh/14.md)
    +   [第十五章 爬取维基百科](docs/think-dast-zh/15.md)
    +   [第十六章 布尔搜索](docs/think-dast-zh/16.md)
    +   [第十七章 排序](docs/think-dast-zh/17.md)
+   [Leetcode C++ 题解](docs/leetcode/cpp/README.md)
    +   [1. Two Sum](docs/leetcode/cpp/0001._Two_Sum.md)
    +   [2. Add Two Numbers](docs/leetcode/cpp/0002._Add_Two_Numbers.md)
    +   [3. Longest Substring Without Repeating Characters](docs/leetcode/cpp/0003._Longest_Substring_Without_Repeating_Characters.md)
    +   [004. Median of Two Sorted Arrays](docs/leetcode/cpp/0004._Median_of_Two_Sorted_Arrays.md)
    +   [5. Longest Palindromic Substring](docs/leetcode/cpp/0005._Longest_Palindromic_Substring.md)
    +   [6. ZigZag Conversion](docs/leetcode/cpp/0006._ZigZag_Conversion.md)
    +   [7. Reverse Integer](docs/leetcode/cpp/0007._Reverse_Integer.md)
    +   [8. String to Integer (atoi)](docs/leetcode/cpp/0008._String_to_Integer_(atoi).md)
    +   [9. Palindrome Number](docs/leetcode/cpp/0009._Palindrome_Number.md)
    +   [10. Regular Expression Matching](docs/leetcode/cpp/0010._Regular_Expression_Matching.md)
    +   [11. container with most water](docs/leetcode/cpp/0011._Container_With_Most_Water.md)
    +   [12. Integer to Roman](docs/leetcode/cpp/0012._Integer_to_Roman.md)
    +   [14. Longest Common Prefix](docs/leetcode/cpp/0014._Longest_Common_Prefix.md)
    +   [15. 3sum](docs/leetcode/cpp/0015._3sum.md)
    +   [16. 3Sum Closest](docs/leetcode/cpp/0016._3Sum_Closest.md)
    +   [17. Letter Combinations of a Phone Number](docs/leetcode/cpp/0017._Letter_Combinations_of_a_Phone_Number.md)
    +   [18. 4Sum](docs/leetcode/cpp/0018._4Sum.md)
    +   [19. Remove Nth Node From End of List](docs/leetcode/cpp/0019._Remove_Nth_Node_From_End_of_List.md)
    +   [20. Valid Parentheses](docs/leetcode/cpp/0020._Valid_Parentheses.md)
    +   [21. Merge Two Sorted Lists](docs/leetcode/cpp/0021._Merge_Two_Sorted_Lists.md)
    +   [22. Generate Parentheses](docs/leetcode/cpp/0022._Generate_Parentheses.md)
    +   [23. merge k sorted lists](docs/leetcode/cpp/0023._Merge_K_Sorted_Lists.md)
    +   [24. Swap Nodes in Pairs](docs/leetcode/cpp/0024._Swap_Nodes_in_Pairs.md)
    +   [25.reverse nodes in k group](docs/leetcode/cpp/0025._Reverse_Nodes_In_K_Group.md)
    +   [26.Remove Duplicates From Sorted Array](docs/leetcode/cpp/0026._Remove_Duplicates_From_Sorted_Array.md)
    +   [27.Remove Element](docs/leetcode/cpp/0027._Remove_Element.md)
    +   [28.implement strstr](docs/leetcode/cpp/0028._Implement_Strstr.md)
    +   [29.divide two integers](docs/leetcode/cpp/0029._Divide_Two_Integers.md)
    +   [30.substring with concatenation of all words](docs/leetcode/cpp/0030._Substring_With_Concatenation_Of_All_Words.md)
    +   [31.Next Permutatio](docs/leetcode/cpp/0031._Next_Permutatio.md)
    +   [32. Longest Valid Parentheses](docs/leetcode/cpp/0032._Longest_Valid_Parentheses.md)
    +   [033. Search in Rotated Sorted Array](docs/leetcode/cpp/0033._Search_in_Rotated_Sorted_Array.md)
    +   [34. Find First and Last Position of Element in Sorted Array](docs/leetcode/cpp/0034._Find_First_and_Last_Position_of_Element_in_Sorted_Array.md)
    +   [???????](docs/leetcode/cpp/0035._Search_Insert_Position.md)
    +   [36. Valid Sudoku](docs/leetcode/cpp/0036._Valid_Sudoku.md)
    +   [38. Count and Say](docs/leetcode/cpp/0038._Count_and_Say.md)
    +   [39. Combination Sum](docs/leetcode/cpp/0039._Combination_Sum.md)
    +   [40. Combination Sum II](docs/leetcode/cpp/0040._Combination_Sum_II.md)
    +   [041.First Missing Positive](docs/leetcode/cpp/0041._First_Missing_Positive.md)
    +   [42. Trapping Rain Water](docs/leetcode/cpp/0042._Trapping_Rain_Water.md)
    +   [43. Multiply Strings](docs/leetcode/cpp/0043._Multiply_Strings.md)
    +   [44. Wildcard Matching](docs/leetcode/cpp/0044._Wildcard_Matching.md)
    +   [045. Jump Game II](docs/leetcode/cpp/0045._Jump_Game_II.md)
    +   [46. Permutations](docs/leetcode/cpp/0046._Permutations.md)
    +   [47. Permutations II](docs/leetcode/cpp/0047._Permutations_II.md)
    +   [49. Group Anagrams](docs/leetcode/cpp/0048._Rotate_Image.md)
    +   [49. Group Anagrams](docs/leetcode/cpp/0049._Group_Anagrams.md)
    +   [50. powx n](docs/leetcode/cpp/0050._powx_n.md)
    +   [51. N-Queens](docs/leetcode/cpp/0051._N-Queens.md)
    +   [52. N-Queens II](docs/leetcode/cpp/0052._N-Queens_II.md)
    +   [053. Maximum Subarray](docs/leetcode/cpp/0053._Maximum_Subarray.md)
    +   [54. Spiral Matrix](docs/leetcode/cpp/0054._Spiral_Matrix.md)
    +   [55. Jump Game](docs/leetcode/cpp/0055._Jump_Game.md)
    +   [56. Merge Intervals](docs/leetcode/cpp/0056._Merge_Intervals.md)
    +   [57. Insert Interval](docs/leetcode/cpp/0057._Insert_Interval.md)
    +   [058. Length of Last Word](docs/leetcode/cpp/0058._Length_of_Last_Word.md)
    +   [59. Spiral Matrix II](docs/leetcode/cpp/0059._Spiral_Matrix_II.md)
    +   [60. Permutation Sequence](docs/leetcode/cpp/0060._Permutation_Sequence.md)
    +   [61. Rotate List](docs/leetcode/cpp/0061._Rotate_List.md)
    +   [62. Unique Paths](docs/leetcode/cpp/0062._Unique_Paths.md)
    +   [63. Unique Paths II](docs/leetcode/cpp/0063._Unique_Paths_II.md)
    +   [64. Minimum Path Sum](docs/leetcode/cpp/0064._Minimum_Path_Sum.md)
    +   [65. Valid Number](docs/leetcode/cpp/0065._Valid_Number.md)
    +   [66. Plus One](docs/leetcode/cpp/0066._Plus_One.md)
    +   [68. Text Justification](docs/leetcode/cpp/0068._Text_Justification.md)
    +   [69. Sqrt(x)](docs/leetcode/cpp/0069._Sqr(x).md)
    +   [72. Edit Distance](docs/leetcode/cpp/0072._Edit_Distance.md)
    +   [75. Sort Colors](docs/leetcode/cpp/0075._Sort_Colors.md)
    +   [76. Minimum Window Substring](docs/leetcode/cpp/0076._Minimum_Window_Substring.md)
    +   [77. Combinations](docs/leetcode/cpp/0077._combinations.md)
    +   [78. Subsets](docs/leetcode/cpp/0078._subsets.md)
    +   [81. Search in Rotated Sorted Array II](docs/leetcode/cpp/0081._Search_in_Rotated_Sorted_Array_II.md)
    +   [???????](docs/leetcode/cpp/0083._Remove_Duplicates_From_Sorted_Lists.md)
    +   [84. Largest Rectangle in Histogram](docs/leetcode/cpp/0084._Largest_Rectangle_in_Histogram.md)
    +   [85. Maximal Rectangle](docs/leetcode/cpp/0085._Maximal_Rectangle.md)
    +   [87. Scramble String](docs/leetcode/cpp/0087._Scramble_String.md)
    +   [88.Merge Sorted Array](docs/leetcode/cpp/0088._Merge_Sorted_Array.md)
    +   [90. Subsets II](docs/leetcode/cpp/0090._Subsets_II.md)
    +   [94. Binary Tree Inorder Traversal](docs/leetcode/cpp/0094._binary_tree_inorder_traversal.md)
    +   [96. Unique Binary Search Trees](docs/leetcode/cpp/0096._Unique_Binary_Search_Trees.md)
    +   [97. Interleaving String](docs/leetcode/cpp/0097._Interleaving_String.md)
    +   [99. Recover Binary Search Tree](docs/leetcode/cpp/0099._Recover_Binary_Search_Tree.md)
    +   [100. same tree](docs/leetcode/cpp/0100._same_tree.md)
    +   [101. Symmetric Tree](docs/leetcode/cpp/0101._Symmetric_Tree.md)
    +   [102. Binary Tree Level Order Traversal](docs/leetcode/cpp/0102._Binary_Tree_Level_Order_Traversal.md)
    +   [104. Maximum Depth of Binary Tree](docs/leetcode/cpp/0104._Maximum_Depth_of_Binary_Tree.md)
    +   [105. Construct Binary Tree from Preorder and Inorder Traversal](docs/leetcode/cpp/0105._Construct_Binary_Tree_from_Preorder_and_Inorder_Traversal.md)
    +   [106. Construct Binary Tree from Inorder and Postorder Traversal](docs/leetcode/cpp/0106._Construct_Binary_Tree_from_Inorder_and_Postorder_Traversal.md)
    +   [107.Binary Tree Level Order Traversal II](docs/leetcode/cpp/0107._Binary_Tree_Level_Order_Traversal_II.md)
    +   [108. Convert Sorted Array to Binary Search Tree](docs/leetcode/cpp/0108._Convert_Sorted_Array_to_Binary_Search_Tree.md)
    +   [109. Convert Sorted List to Binary Search Tree](docs/leetcode/cpp/0109._Convert_Sorted_List_to_Binary_Search_Tree.md)
    +   [110.Balanced Binary Tree](docs/leetcode/cpp/0110._Balanced_Binary_Tree.md)
    +   [111. Minimum Depth of Binary Tree](docs/leetcode/cpp/0111._Minimum_Depth_Of_Binary_Tree.md)
    +   [112. Path Sum](docs/leetcode/cpp/0112._Path_Sum.md)
    +   [114. Flatten Binary Tree to Linked List](docs/leetcode/cpp/0114._Flatten_Binary_Tree_to_Linked_List.md)
    +   [115.Distinct Subsequences](docs/leetcode/cpp/0115._Distinct_Subsequences.md)
    +   [118. Pascal's Triangle](docs/leetcode/cpp/0118._Pascals_Triangle.md)
    +   [119. Pascal's Triangle II](docs/leetcode/cpp/0119._Pascals_Triangle-II.md)
    +   [120. Triangle](docs/leetcode/cpp/0120._Triangle.md)
    +   [121. Best Time to Buy and Sell Stock](docs/leetcode/cpp/0121._Best_Tim_to_Buy_and_Sell_Stock.md)
    +   [122. Best Time to Buy and Sell Stock II](docs/leetcode/cpp/0122._Best_Time_to_Buy_and_Sell_Stock_II.md)
    +   [123. Best Time to Buy and Sell Stock III](docs/leetcode/cpp/0123._Best_Time_to_Buy_and_Sell_Stock_III.md)
    +   [124. Binary Tree Maximum Path Sum](docs/leetcode/cpp/0124._Binary_Tree_Maximum_Path_Sum.md)
    +   [127. Word Ladder](docs/leetcode/cpp/0127._Word_Ladde.md)
    +   [128. Longest Consecutive Sequence](docs/leetcode/cpp/0128._Longest_Consecutive_Sequence.md)
    +   [129. Sum Root to Leaf Numbers](docs/leetcode/cpp/0129._Sum_Root_to_Leaf_Numbers.md)
    +   [131. Palindrome Paritionaing](docs/leetcode/cpp/0131._Palindrome_Partitioning.md)
    +   [136. Single Numbe](docs/leetcode/cpp/0136._Single_Numbe.md)
    +   [137.Single Number II](docs/leetcode/cpp/0137._Single_Number_II.md)
    +   [???????](docs/leetcode/cpp/0141._Linked_List_Cycle.md)
    +   [142. linked list cycle II](docs/leetcode/cpp/0142._Linked_List_Cycle_II.md)
    +   [144. Binary Tree Preorder Traversal](docs/leetcode/cpp/0144._Binary_Tree_Preorder_Traversal.md)
    +   [145. Binary Tree Postorder Traversal](docs/leetcode/cpp/0145._Binary_Tree_Postorder_Traversal.md)
    +   [147. Insertion Sort List](docs/leetcode/cpp/0147._Insert_on_Sort_List.md)
    +   [148.Sort list](docs/leetcode/cpp/0148._Sort_list.md)
    +   [151. Reverse Words in a String](docs/leetcode/cpp/0151._Reverse_Words_in_a_String.md)
    +   [153. Find Minimum in Rotated Sorted Array](docs/leetcode/cpp/0153._Find_Minimum_in_Rotated_Sorted_Array.md)
    +   [154. Find Minimum in Rotated Sorted Array II](docs/leetcode/cpp/0154._Find_Minimum_in_Rotated_Sorted_Array-II.md)
    +   [160 intersection_of_Two_Linked_Lists](docs/leetcode/cpp/0160._Intersection_Of_Two_Linked_Lists.md)
    +   [164. Maximum Gap](docs/leetcode/cpp/0164._Maximum_Gap.md)
    +   [166. Fraction to Recurring Decimal](docs/leetcode/cpp/0166._Fraction_to_Recurring_Decimal.md)
    +   [167. Two Sum II - Input array is sorted](docs/leetcode/cpp/0167._Two_Sum_II-Input_array_is_sorted.md)
    +   [199. Binary Tree Right Side View](docs/leetcode/cpp/0199._Binary_Tree_Right_Side_View.md)
    +   [216. Combination Sum III](docs/leetcode/cpp/0216._Combination_Sum_III.md)
    +   [230. Kth Smallest Element in a BST](docs/leetcode/cpp/0230._Kth_Smallest_Element_in_a_BST.md)
    +   [260. Single Number III](docs/leetcode/cpp/0260._Single_Number_III.md)
    +   [287. Find the Duplicate Number](docs/leetcode/cpp/0287._Find_the_Duplicate_Number.md)
    +   [326. Power_of_Three](docs/leetcode/cpp/0326._Power_Of_Three.md)
    +   [328. Odd Even Linked List](docs/leetcode/cpp/0328._Odd_Even_Linked_List.md)
    +   [329. Longest Increasing Path in a Matrix](docs/leetcode/cpp/0329._Longest_Increasing_Path_in_a_Matrix.md)
    +   [338. Counting Bits ](docs/leetcode/cpp/0338._Counting_Bits.md)
    +   [413. Arithmetic Slices](docs/leetcode/cpp/0413._Arithmetic_Slices.md)
    +   [442. Find All Duplicates in an Array](docs/leetcode/cpp/0442._Find_All_Duplicates_in_an_Array.md)
    +   [513. Find Bottom Left Tree Value](docs/leetcode/cpp/0513._Find_Bottom_Left_Tree_Value.md)
    +   [515. Find Largest Value in Each Tree Row](docs/leetcode/cpp/0515._Find_Largest_Value_in_Each_Tree_Row.md)
    +   [540. Single Element in a Sorted Array](docs/leetcode/cpp/0540._Single_Element_in_a_Sorted_Array.md)
    +   [581. Shortest Unsorted Continuous Subarray](docs/leetcode/cpp/0581._Shortest_Unsorted_Continuous_Subarray.md)
    +   [793. K Inverse Pairs Array](docs/leetcode/cpp/0629._K_Inverse_Pairs_Array.md)
    +   [632. Smallest Range](docs/leetcode/cpp/0632._Smallest_Range.md)
    +   [654. Maximum Binary Tree ](docs/leetcode/cpp/0654._maximum_binary_tree.md)
    +   [668. Kth Smallest Number in Multiplication Table](docs/leetcode/cpp/0668._Kth_Smallest_Number_in_Multiplication_Table.md)
    +   [701. Insert into a Binary Search Tree](docs/leetcode/cpp/0701._Insert_into_a_Binary_Search_Tree.md)
    +   [715. Range Module](docs/leetcode/cpp/0715._Range_Module.md)
    +   [793. Find K-th Smallest Pair Distance](docs/leetcode/cpp/0719._Find_K-th_Smallest_Pair_Distance.md)
    +   [739. Daily Temperatures](docs/leetcode/cpp/0739._Daily_Temperatures.md)
    +   [797. All Paths From Source to Target](docs/leetcode/cpp/0797._All_Paths_From_Source_To_Target.md)
    +   [814. Binary Tree Pruning](docs/leetcode/cpp/0814._Binary_Tree_Pruning.md)
    +   [841. Keys and Rooms](docs/leetcode/cpp/0841._Keys_and_Rooms.md)
    +   [877. Stone Game](docs/leetcode/cpp/0877._Stone_Game.md)
    +   [945. Minimum Increment to Make Array Unique](docs/leetcode/cpp/0945._Minimum_Increment_to_Make_Array_Unique.md)
    +   [946. Validate Stack Sequences](docs/leetcode/cpp/0946._Validate_Stack_Sequences.md)
    +   [947. Most Stones Removed with Same Row or Column](docs/leetcode/cpp/0947._Most_Stones_Removed_with_Same_Row_or_Column.md)
    +   [948. Bag of Tokens](docs/leetcode/cpp/0948._Bag_of_Tokens.md)
    +   [949. Largest Time for Given Digits](docs/leetcode/cpp/0949._Largest_Time_for_Given_Digits.md)
    +   [950. Reveal Cards In Increasing Order](docs/leetcode/cpp/0950._Reveal_Cards_In_Increasing_Order.md)
    +   [951. Flip Equivalent Binary Trees](docs/leetcode/cpp/0951._Flip_Equivalent_Binary_Trees.md)
    +   [952. Largest Component Size by Common Factor](docs/leetcode/cpp/0952._Largest_Component_Size_by_Common_Factor.md)
+   [Leetcode Java 题解](docs/leetcode/java/README.md)
    +   [1. Two Sum](docs/leetcode/java/0001._Two_Sum.md)
    +   [2. Add Two Numbers](docs/leetcode/java/0002._add_two_numbers.md)
    +   [3. Longest Substring Without Repeating Characters](docs/leetcode/java/0003._Longest_Substring_Without_Repeating_Characters.md)
    +   [4. Median of Two Sorted Arrays](docs/leetcode/java/0004._Median_of_Two_Sorted_Arrays.md)
    +   [5. Longest Palindromic Substring](docs/leetcode/java/0005._Longest_Palindromic_Substring.md)
    +   [6. ZigZag Conversion](docs/leetcode/java/0006._ZigZag_Conversion.md)
    +   [7. Reverse Integer](docs/leetcode/java/0007._Reverse_Integer.md)
    +   [23. Merge K Sorted Lists](docs/leetcode/java/0023._Merge_K_Sorted_Lists.md)
    +   [141. Linked List Cycle](docs/leetcode/java/0141._linked_list_cycle.md)
    +   [218. The Skyline Problem](docs/leetcode/java/0218._The_Skyline_Problem.md)
    +   [238. Product of Array Except Self](docs/leetcode/java/0238._product_of_array_except_self.md)
    +   [342. Power of Four](docs/leetcode/java/0342._Power_of_Four.md)
    +   [403. Frog Jump](docs/leetcode/java/0403._Frog_Jump.md)
    +   [757. Set Intersection Size At Least Two](docs/leetcode/java/0757._Set_Intersection_Size_At_Least_Two.md)
    +   [768. Max Chunks To Make Sorted II](docs/leetcode/java/0768._Max_Chunks_To_Make_Sorted_II.md)
    +   [780. Reaching Points](docs/leetcode/java/0780._Reaching_Points.md)
    +   [793. Preimage Size of Factorial Zeroes Function](docs/leetcode/java/0793._Preimage_Size_of_Factorial_Zeroes_Function.md)
    +   [827. Making A Large Island](docs/leetcode/java/0827._Making_A_Large_Island.md)
    +   [828. Unique Letter String](docs/leetcode/java/0828._Unique_Letter_String.md)
    +   [834. Sum of Distances in Tree](docs/leetcode/java/0834._Sum_of_Distances_in_Tree.md)
    +   [843. Guess the Word](docs/leetcode/java/0843._Guess_the_Word.md)
    +   [847. Shortest Path Visiting All Nodes](docs/leetcode/java/0847._Shortest_Path_Visiting_All_Nodes.md)
    +   [850. Rectangle Area II](docs/leetcode/java/0850._Rectangle_Area_II.md)
    +   [854. K-Similar Strings](docs/leetcode/java/0854._K-Similar_Strings.md)
    +   [857. Minimum Cost to Hire K Workers](docs/leetcode/java/0857._Minimum_Cost_to_Hire_K_Workers.md)
    +   [862. Shortest Subarray with Sum at Least K](docs/leetcode/java/0862._Shortest_Subarray_with_Sum_at_Least_K.md)
    +   [864. Shortest Path to Get All Keys](docs/leetcode/java/0864._Shortest_Path_to_Get_All_Keys.md)
    +   [871. Minimum Number of Refueling Stops](docs/leetcode/java/0871._Minimum_Number_of_Refueling_Stops.md)
    +   [878. Nth Magical Number](docs/leetcode/java/0878._Nth_Magical_Number.md)
    +   [879. Profitable Schemes](docs/leetcode/java/0879._Profitable_Schemes.md)
    +   [899. Reachable Nodes In Subdivided Graph](docs/leetcode/java/0882._Reachable_Nodes_In_Subdivided_Graph.md)
    +   [887. Super Egg Drop](docs/leetcode/java/0887._Super_Egg_Drop.md)
    +   [891. Sum of Subsequence Widths](docs/leetcode/java/0891._Sum_of_Subsequence_Widths.md)
    +   [895. Maximum Frequency Stack](docs/leetcode/java/0895._Maximum_Frequency_Stack.md)
    +   [899. Orderly Queue](docs/leetcode/java/0899._Orderly_Queue.md)
    +   [902. Numbers At Most N Given Digit Set](docs/leetcode/java/0902._Numbers_At_Most_N_Given_Digit_Set.md)
    +   [903. Valid Permutations for DI Sequence](docs/leetcode/java/0903._Valid_Permutations_for_DI_Sequence.md)
    +   [906. Super Palindromes](docs/leetcode/java/0906._Super_Palindromes.md)
    +   [913. Cat and Mouse](docs/leetcode/java/0913._Cat_and_Mouse.md)
    +   [920. Number of Music Playlists](docs/leetcode/java/0920._Number_of_Music_Playlists.md)
+ [Leetcode JavaScript 题解](docs/leetcode/javascript/README.md)
    + [0001 Two Sum](docs/leetcode/javascript/0001._Two_Sum.md)
    + [0002 Add Two Numbers](docs/leetcode/javascript/0002._Add_Two_Numbers.md)
    + [0003 Longest Substring without Repeating Characters](docs/leetcode/javascript/0003._Longest_Substring_without_Repeating_Characters.md)
    + [0007 Reverse Integer](docs/leetcode/javascript/0007._Reverse_Integer.md)
    + [0008 String to Integer](docs/leetcode/javascript/0008._String_to_Integer.md)
    + [0009 Palindrome Number](docs/leetcode/javascript/0009._Palindrome_Number.md)
    + [0011 Container With Most Water](docs/leetcode/javascript/0011._Container_With_Most_Water.md)
    + [0012 Integer To Roman](docs/leetcode/javascript/0012._Integer_To_Roman.md)
    + [0013 Roman To Integer](docs/leetcode/javascript/0013._Roman_To_Integer.md)
    + [0014 Longest Common Prefix](docs/leetcode/javascript/0014._Longest_Common_Prefix.md)
    + [0015 Three Sum](docs/leetcode/javascript/0015._Three_Sum.md)
    + [0016 3 Sum Closest](docs/leetcode/javascript/0016._3_Sum_Closest.md)
    + [0017 Letter Combinations Of A Phone Number](docs/leetcode/javascript/0017._Letter_Combinations_Of_A_Phone_Number.md)
    + [0019 Remove Nth Node From End Of List](docs/leetcode/javascript/0019._Remove_Nth_Node_From_End_Of_List.md)
    + [0020 Valid Parentheses](docs/leetcode/javascript/0020._Valid_Parentheses.md)
    + [0021 Merge Two Sorted Lists](docs/leetcode/javascript/0021._Merge_Two_Sorted_Lists.md)
    + [0022 Generate Parentheses](docs/leetcode/javascript/0022._Generate_Parentheses.md)
    + [0024 Swap Nodes In Pairs](docs/leetcode/javascript/0024._Swap_Nodes_In_Pairs.md)
    + [0027 Remove Element](docs/leetcode/javascript/0027._Remove_Element.md)
    + [0031 Next Permutation](docs/leetcode/javascript/0031._Next_Permutation.md)
    + [0035 Search Insert Position](docs/leetcode/javascript/0035._Search_Insert_Position.md)
    + [0054 Spiral Matrix](docs/leetcode/javascript/0054._Spiral_Matrix.md)
    + [0055 Jump Game](docs/leetcode/javascript/0055._Jump_Game.md)
    + [0056 Merge Intervals](docs/leetcode/javascript/0056._Merge_Intervals.md)
    + [0058 Length of Last Word](docs/leetcode/javascript/0058._Length_of_Last_Word.md)
    + [0061 Rotate List](docs/leetcode/javascript/0061._Rotate_List.md)
    + [0062 Unique Paths](docs/leetcode/javascript/0062._Unique_Paths.md)
    + [0066 Plus One](docs/leetcode/javascript/0066._Plus_One.md)
    + [0067 Add Binary](docs/leetcode/javascript/0067._Add_Binary.md)
    + [0074 Search a 2D Matrix](docs/leetcode/javascript/0074._Search_a_2D_Matrix.md)
    + [0079 Search Word](docs/leetcode/javascript/0079._Search_Word.md)
    + [0083 Remove Duplicates From Sorted List](docs/leetcode/javascript/0083._Remove_Duplicates_From_Sorted_List.md)
    + [0094 Binary Tree Inorder Traversal](docs/leetcode/javascript/0094._Binary_Tree_Inorder_Traversal.md)
    + [0098 Validate Binary Search Tree](docs/leetcode/javascript/0098._Validate_Binary_Search_Tree.md)
    + [0100 Same Tree](docs/leetcode/javascript/0100._Same_Tree.md)
    + [0101 Symmetric Tree](docs/leetcode/javascript/0101._Symmetric_Tree.md)
    + [0104 Maximum Depth of Binary Tree](docs/leetcode/javascript/0104._Maximum_Depth_of_Binary_Tree.md)
    + [0106 Construct Binary Tree From Inorder And Postorder Traversal](docs/leetcode/javascript/0106._Construct_Binary_Tree_From_Inorder_And_Postorder_Traversal.md)
    + [0141 Linked List Cycle](docs/leetcode/javascript/0141._Linked_List_Cycle.md)
    + [0146 LRU Cache](docs/leetcode/javascript/0146._LRU_Cache.md)
    + [0167 Two Sum II - Input array is sorted](docs/leetcode/javascript/0167._Two_Sum_II_-_Input_array_is_sorted.md)
    + [0167 Two Sum II Input Array is Sorted](docs/leetcode/javascript/0167._Two_Sum_II_Input_Array_is_Sorted.md)
    + [0171 Excel Sheet Column Number](docs/leetcode/javascript/0171._Excel_Sheet_Column_Number.md)
    + [0179 Largest Number](docs/leetcode/javascript/0179._Largest_Number.md)
    + [0203 Remove Linked List Elements](docs/leetcode/javascript/0203._Remove_Linked_List_Elements.md)
    + [0206 Reverse-Linked-List](docs/leetcode/javascript/0206._Reverse-Linked-List.md)
    + [0209 Minimum Size Subarray Sum](docs/leetcode/javascript/0209._Minimum_Size_Subarray_Sum.md)
    + [0258 Add Digits](docs/leetcode/javascript/0258._Add_Digits.md)
    + [0347 Top K Frequent Elements](docs/leetcode/javascript/0347._Top_K_Frequent_Elements.md)
    + [0402 Remove K Digits](docs/leetcode/javascript/0402._Remove_K_Digits.md)
    + [0406 Queue Reconstruction By Height](docs/leetcode/javascript/0406._Queue_Reconstruction_By_Height.md)
    + [0485 Max Consecutive Ones](docs/leetcode/javascript/0485._Max_Consecutive_Ones.md)
    + [0539 Minimum Time Difference](docs/leetcode/javascript/0539._Minimum_Time_Difference.md)
    + [0581 Shortest Unsorted Continuous Subarray](docs/leetcode/javascript/0581._Shortest_Unsorted_Continuous_Subarray.md)
    + [0881 Boats to Save People](docs/leetcode/javascript/0881._Boats_to_Save_People.md)
    + [0997 Find The Town Judge](docs/leetcode/javascript/0997._Find_The_Town_Judge.md)
    + [1130 Minimum Cost Tree From Leaf Values](docs/leetcode/javascript/1130._Minimum_Cost_Tree_From_Leaf_Values.md)
+   [Leetcode Python 题解](docs/leetcode/python/README.md)
    +   [001 two sum](docs/leetcode/python/001._two_sum.md)
    +   [002 add two numbers](docs/leetcode/python/002._add_two_numbers.md)
    +   [003 longest substring without repeating characters](docs/leetcode/python/003._longest_substring_without_repeating_characters.md)
    +   [004 median of two sorted arrays](docs/leetcode/python/004._median_of_two_sorted_arrays.md)
    +   [005 longest palindromic substring](docs/leetcode/python/005._longest_palindromic_substring.md)
    +   [006 ZigZag Conversion](docs/leetcode/python/006._ZigZag_Conversion.md)
    +   [007 Reverse Integer](docs/leetcode/python/007._Reverse_Integer.md)
    +   [008 string to integer (atoi)](docs/leetcode/python/008._string_to_integer_(atoi).md)
    +   [009 Palindrome Number](docs/leetcode/python/009._Palindrome_Number.md)
    +   [010 regular expression matching](docs/leetcode/python/010._regular_expression_matching.md)
    +   [011 container with most water](docs/leetcode/python/011._container_with_most_water.md)
    +   [012 Integer to Roman](docs/leetcode/python/012._Integer_to_Roman.md)
    +   [013 Roman to Integer](docs/leetcode/python/013._Roman_to_Integer.md)
    +   [014 longest common prefix](docs/leetcode/python/014._longest_common_prefix.md)
    +   [015 3sum](docs/leetcode/python/015._3sum.md)
    +   [016 3sum closest](docs/leetcode/python/016._3sum_closest.md)
    +   [017 letter combinations of a phone number](docs/leetcode/python/017._letter_combinations_of_a_phone_number.md)
    +   [018 4sum](docs/leetcode/python/018._4sum.md)
    +   [019 remove nth node from end of list](docs/leetcode/python/019._remove_nth_node_from_end_of_list.md)
    +   [020 valid parentheses](docs/leetcode/python/020._valid_parentheses.md)
    +   [021 merge two sorted lists](docs/leetcode/python/021._merge_two_sorted_lists.md)
    +   [022 generate parentheses](docs/leetcode/python/022._generate_parentheses.md)
    +   [023 merge k sorted lists](docs/leetcode/python/023._merge_k_sorted_lists.md)
    +   [024 swap nodes in pairs](docs/leetcode/python/024._swap_nodes_in_pairs.md)
    +   [026 Remove Duplicates from Sorted Array](docs/leetcode/python/026._Remove_Duplicates_from_Sorted_Array.md)
    +   [027 Remove Element](docs/leetcode/python/027._Remove_Element.md)
    +   [028 implement strstr()](docs/leetcode/python/028._implement_strstr.md)
    +   [030 Substring with Concatenation of All Words](docs/leetcode/python/030._Substring_with_Concatenation_of_All_Words.md)
    +   [031 next permutation](docs/leetcode/python/031._next_permutation.md)
    +   [032 longest valid parentheses](docs/leetcode/python/032._longest_valid_parentheses.md)
    +   [033 search in rotated sorted array](docs/leetcode/python/033._search_in_rotated_sorted_array.md)
    +   [034 Search for a Range](docs/leetcode/python/034._Search_for_a_Range.md)
    +   [035 search insert position](docs/leetcode/python/035._search_insert_position.md)
    +   [038 Count and Say](docs/leetcode/python/038._Count_and_Say.md)
    +   [039 combination sum](docs/leetcode/python/039._combination_sum.md)
    +   [040 combination sum ii](docs/leetcode/python/040._combination_sum_ii.md)
    +   [041 First Missing Positive](docs/leetcode/python/041._First_Missing_Positive.md)
    +   [042 trapping rain water](docs/leetcode/python/042._trapping_rain_water.md)
    +   [043 multiply strings](docs/leetcode/python/043._multiply_strings.md)
    +   [044 wildcard matching](docs/leetcode/python/044._wildcard_matching.md)
    +   [045 Jump Game II](docs/leetcode/python/045._Jump_Game_II.md)
    +   [046 permutations](docs/leetcode/python/046._permutations.md)
    +   [047 permutations ii](docs/leetcode/python/047._permutations_ii.md)
    +   [048 rotate image](docs/leetcode/python/048._rotate_image.md)
    +   [049 group anagrams python](docs/leetcode/python/049._group_anagrams_python.md)
    +   [050 pow(x, n)](docs/leetcode/python/050._pow(x,_n).md)
    +   [051 n-queens](docs/leetcode/python/051._n-queens.md)
    +   [052 n-queens ii](docs/leetcode/python/052._n-queens_ii.md)
    +   [053 maximum subarray](docs/leetcode/python/053._maximum_subarray.md)
    +   [054 spiral matrix](docs/leetcode/python/054._spiral_matrix.md)
    +   [055 jump game](docs/leetcode/python/055._jump_game.md)
    +   [056 Merge Intervals](docs/leetcode/python/056._Merge_Intervals.md)
    +   [058 length of last word](docs/leetcode/python/058._length_of_last_word.md)
    +   [059 spiral matrix ii](docs/leetcode/python/059._spiral_matrix_ii.md)
    +   [060 permutation sequence](docs/leetcode/python/060._permutation_sequence.md)
    +   [061 rotate list](docs/leetcode/python/061._rotate_list.md)
    +   [062 unique paths](docs/leetcode/python/062._unique_paths.md)
    +   [064 minimum path sum](docs/leetcode/python/064._minimum_path_sum.md)
    +   [065 unique paths ii](docs/leetcode/python/065.unique_paths_ii.md)
    +   [066 plus one](docs/leetcode/python/066._plus_one.md)
    +   [067 add binary](docs/leetcode/python/067._add_binary.md)
    +   [069 sqrt(x)](docs/leetcode/python/069._sqrt(x).md)
    +   [070 Climbing Stairs](docs/leetcode/python/070._Climbing_Stairs.md)
    +   [072 edit distance](docs/leetcode/python/072._edit_distance.md)
    +   [073 Set Matrix Zeroes](docs/leetcode/python/073._Set_Matrix_Zeroes.md)
    +   [074 search a 2d matrix](docs/leetcode/python/074._search_a_2d_matrix.md)
    +   [075 sort colors](docs/leetcode/python/075._sort_colors.md)
    +   [076 Minimum Window Substring](docs/leetcode/python/076._Minimum_Window_Substring.md)
    +   [077 combinations](docs/leetcode/python/077._combinations.md)
    +   [078 Subsets](docs/leetcode/python/078._Subsets.md)
    +   [079 word search](docs/leetcode/python/079._word_search.md)
    +   [082 remove duplicates from sorted list ii](docs/leetcode/python/082._remove_duplicates_from_sorted_list_ii.md)
    +   [083 remove duplicates from sorted list](docs/leetcode/python/083._remove_duplicates_from_sorted_list.md)
    +   [086 partition list](docs/leetcode/python/086._partition_list.md)
    +   [088 merge sorted array](docs/leetcode/python/088._merge_sorted_array.md)
    +   [089 gray code](docs/leetcode/python/089._gray_code.md)
    +   [090 subsets ii](docs/leetcode/python/090._subsets_ii.md)
    +   [091 decode ways](docs/leetcode/python/091._decode_ways.md)
    +   [092 reverse linked list ii](docs/leetcode/python/092._reverse_linked_list_ii.md)
    +   [093 restore ip addresses](docs/leetcode/python/093._restore_ip_addresses.md)
    +   [094 binary tree inorder traversal](docs/leetcode/python/094._binary_tree_inorder_traversal.md)
    +   [096 unique binary search trees](docs/leetcode/python/096._unique_binary_search_trees.md)
    +   [098 validate binary search tree](docs/leetcode/python/098._validate_binary_search_tree.md)
    +   [100 same tree](docs/leetcode/python/100._same_tree.md)
    +   [101 symmetric tree](docs/leetcode/python/101._symmetric_tree.md)
    +   [102 binary tree level order traversal](docs/leetcode/python/102._binary_tree_level_order_traversal.md)
    +   [103 binary tree zigzag level order traversal](docs/leetcode/python/103._binary_tree_zigzag_level_order_traversal.md)
    +   [104 maximum depth of binary tree](docs/leetcode/python/104._maximum_depth_of_binary_tree.md)
    +   [105 construct binary tree from preorder and inorder traversal](docs/leetcode/python/105._construct_binary_tree_from_preorder_and_inorder_traversal.md)
    +   [106 construct binary tree from inorder and postorder traversal](docs/leetcode/python/106._construct_binary_tree_from_inorder_and_postorder_traversal.md)
    +   [107 binary tree level order traversal ii](docs/leetcode/python/107._binary_tree_level_order_traversal_ii.md)
    +   [108 convert sorted array to binary search tree](docs/leetcode/python/108._convert_sorted_array_to_binary_search_tree.md)
    +   [109 convert sorted list to binary search tree](docs/leetcode/python/109._convert_sorted_list_to_binary_search_tree.md)
    +   [110 balanced binary tree](docs/leetcode/python/110._balanced_binary_tree.md)
    +   [111 minimum depth of binary tree](docs/leetcode/python/111._minimum_depth_of_binary_tree.md)
    +   [112 path sum](docs/leetcode/python/112._path_sum.md)
    +   [113 path sum ii](docs/leetcode/python/113._path_sum_ii.md)
    +   [114 flatten binary tree to linked list](docs/leetcode/python/114._flatten_binary_tree_to_linked_list.md)
    +   [116 populating next right pointers in each node](docs/leetcode/python/116._populating_next_right_pointers_in_each_node.md)
    +   [117 Populating Next Right Pointers in Each Node II](docs/leetcode/python/117._Populating_Next_Right_Pointers_in_Each_Node_II.md)
    +   [118 pascal's triangle](docs/leetcode/python/118._pascal's_triangle.md)
    +   [119 Pascal's Triangle II](docs/leetcode/python/119._Pascal's_Triangle_II.md)
    +   [120 Triangle](docs/leetcode/python/120._Triangle.md)
    +   [121 Best Time to Buy and Sell Stock](docs/leetcode/python/121._Best_Time_to_Buy_and_Sell_Stock.md)
    +   [124 Binary Tree Maximum Path Sum](docs/leetcode/python/124._Binary_Tree_Maximum_Path_Sum.md)
    +   [125 valid palindrome](docs/leetcode/python/125._valid_palindrome.md)
    +   [126 Word Ladder II](docs/leetcode/python/126._Word_Ladder_II.md)
    +   [127 word ladder](docs/leetcode/python/127._word_ladder.md)
    +   [128 Longest Consecutive Sequence](docs/leetcode/python/128._Longest_Consecutive_Sequence.md)
    +   [129 sum root to leaf numbers](docs/leetcode/python/129._sum_root_to_leaf_numbers.md)
    +   [130 surrounded regions](docs/leetcode/python/130._surrounded_regions.md)
    +   [131 palindrome partitioning](docs/leetcode/python/131._palindrome_partitioning.md)
    +   [133 clone graph](docs/leetcode/python/133._clone_graph.md)
    +   [136 single number](docs/leetcode/python/136._single_number.md)
    +   [139 word break](docs/leetcode/python/139._word_break.md)
    +   [140 word break ii](docs/leetcode/python/140._word_break_ii.md)
    +   [141 linked list cycle](docs/leetcode/python/141._linked_list_cycle.md)
    +   [142_Linked_List_Cycle_II md](docs/leetcode/python/142_Linked_List_Cycle_II.md)
    +   [143 reorder list](docs/leetcode/python/143._reorder_list.md)
    +   [144 binary tree preorder traversal](docs/leetcode/python/144._binary_tree_preorder_traversal.md)
    +   [145 binary tree postorder traversal](docs/leetcode/python/145._binary_tree_postorder_traversal.md)
    +   [147 insertion sort list](docs/leetcode/python/147._insertion_sort_list.md)
    +   [148 sort list](docs/leetcode/python/148._sort_list.md)
    +   [150 evaluate reverse polish notation](docs/leetcode/python/150._evaluate_reverse_polish_notation.md)
    +   [151 reverse words in a string](docs/leetcode/python/151._reverse_words_in_a_string.md)
    +   [152 maximum product subarray](docs/leetcode/python/152._maximum_product_subarray.md)
    +   [153 find minimum in rotated sorted array](docs/leetcode/python/153._find_minimum_in_rotated_sorted_array.md)
    +   [155 min stack](docs/leetcode/python/155._min_stack.md)
    +   [157 Read N Characters Given Read4](docs/leetcode/python/157._Read_N_Characters_Given_Read4.md)
    +   [158 Read N Characters Given Read4 II - Call multiple times](docs/leetcode/python/158._Read_N_Characters_Given_Read4_II_-_Call_multiple_times.md)
    +   [159 Longest Substring with At Most Two Distinct Characters](docs/leetcode/python/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md)
    +   [160 intersection of two linked lists](docs/leetcode/python/160._intersection_of_two_linked_lists.md)
    +   [162 find peak element](docs/leetcode/python/162._find_peak_element.md)
    +   [165 compare version numbers](docs/leetcode/python/165._compare_version_numbers.md)
    +   [166 Fraction to Recurring Decimal](docs/leetcode/python/166._Fraction_to_Recurring_Decimal.md)
    +   [167 two sum ii - input array is sorted](docs/leetcode/python/167._two_sum_ii_-_input_array_is_sorted.md)
    +   [168 excel sheet column title](docs/leetcode/python/168._excel_sheet_column_title.md)
    +   [169 majority element](docs/leetcode/python/169._majority_element.md)
    +   [171 excel sheet column number](docs/leetcode/python/171._excel_sheet_column_number.md)
    +   [173 binary search tree iterator](docs/leetcode/python/173._binary_search_tree_iterator.md)
    +   [179 Largest Number](docs/leetcode/python/179._Largest_Number.md)
    +   [182 duplicate emails](docs/leetcode/python/182._duplicate_emails.md)
    +   [189 rotate array](docs/leetcode/python/189._rotate_array.md)
    +   [191 number of 1 bits](docs/leetcode/python/191._number_of_1_bits.md)
    +   [198 house robber](docs/leetcode/python/198._house_robber.md)
    +   [199 binary tree right side view](docs/leetcode/python/199._binary_tree_right_side_view.md)
    +   [200 number of islands](docs/leetcode/python/200._number_of_islands.md)
    +   [203 remove linked list elements](docs/leetcode/python/203._remove_linked_list_elements.md)
    +   [204 count primes](docs/leetcode/python/204._count_primes.md)
    +   [205 isomorphic strings](docs/leetcode/python/205._isomorphic_strings.md)
    +   [206 reverse linked list](docs/leetcode/python/206._reverse_linked_list.md)
    +   [207 course schedule](docs/leetcode/python/207._course_schedule.md)
    +   [208 implement trie (prefix tree)](docs/leetcode/python/208._implement_trie_(prefix_tree).md)
    +   [210 course schedule ii](docs/leetcode/python/210._course_schedule_ii.md)
    +   [211 Add and Search Word - Data structure design](docs/leetcode/python/211._Add_and_Search_Word_-_Data_structure_design.md)
    +   [213 house robber ii](docs/leetcode/python/213._house_robber_ii.md)
    +   [216 combination sum iii](docs/leetcode/python/216._combination_sum_iii.md)
    +   [217 contains duplicate](docs/leetcode/python/217._contains_duplicate.md)
    +   [218 The Skyline Problem](docs/leetcode/python/218._The_Skyline_Problem.md)
    +   [219 contains duplicate ii](docs/leetcode/python/219._contains_duplicate_ii.md)
    +   [221 maximal square](docs/leetcode/python/221._maximal_square.md)
    +   [222 count complete tree nodes](docs/leetcode/python/222._count_complete_tree_nodes.md)
    +   [223 rectangle area](docs/leetcode/python/223._rectangle_area.md)
    +   [224 Basic Calculator](docs/leetcode/python/224._Basic_Calculator.md)
    +   [225 implement stack using queues](docs/leetcode/python/225._implement_stack_using_queues.md)
    +   [226 invert binary tree](docs/leetcode/python/226._invert_binary_tree.md)
    +   [227 basic calculator ii](docs/leetcode/python/227._basic_calculator_ii.md)
    +   [228 summary ranges](docs/leetcode/python/228._summary_ranges.md)
    +   [229 majority element ii](docs/leetcode/python/229._majority_element_ii.md)
    +   [230 kth smallest element in a bst](docs/leetcode/python/230._kth_smallest_element_in_a_bst.md)
    +   [231 Power of Two](docs/leetcode/python/231._Power_of_Two.md)
    +   [232 implement queue using stacks](docs/leetcode/python/232._implement_queue_using_stacks.md)
    +   [234 palindrome linked list](docs/leetcode/python/234._palindrome_linked_list.md)
    +   [235 lowest common ancestor of a binary search tree](docs/leetcode/python/235._lowest_common_ancestor_of_a_binary_search_tree.md)
    +   [236 lowest common ancestor of a binary tree](docs/leetcode/python/236._lowest_common_ancestor_of_a_binary_tree.md)
    +   [237 delete node in a linked list](docs/leetcode/python/237._delete_node_in_a_linked_list.md)
    +   [238 product of array except self](docs/leetcode/python/238._product_of_array_except_self.md)
    +   [240 search a 2d matrix ii](docs/leetcode/python/240._search_a_2d_matrix_ii.md)
    +   [242 valid anagram](docs/leetcode/python/242._valid_anagram.md)
    +   [249 Group Shifted Strings](docs/leetcode/python/249._Group_Shifted_Strings.md)
    +   [252 Meeting Rooms](docs/leetcode/python/252._Meeting_Rooms.md)
    +   [255 Verify Preorder Sequence in Binary Search Tree](docs/leetcode/python/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md)
    +   [256 Paint House](docs/leetcode/python/256._Paint_House.md)
    +   [257 binary tree paths](docs/leetcode/python/257._binary_tree_paths.md)
    +   [258_Add_Digits md](docs/leetcode/python/258._Add_Digits.md)
    +   [261 Graph Valid Tree](docs/leetcode/python/261._Graph_Valid_Tree.md)
    +   [263 ugly number](docs/leetcode/python/263._ugly_number.md)
    +   [264 ugly number ii](docs/leetcode/python/264._ugly_number_ii.md)
    +   [265 Paint House II](docs/leetcode/python/265._Paint_House_II.md)
    +   [266 Palindrome Permutation](docs/leetcode/python/266._Palindrome_Permutation.md)
    +   [267 Palindrome Permutation II](docs/leetcode/python/267._Palindrome_Permutation_II.md)
    +   [268 missing number](docs/leetcode/python/268._missing_number.md)
    +   [270 Closest Binary Search Tree Value](docs/leetcode/python/270._Closest_Binary_Search_Tree_Value.md)
    +   [276 Paint Fence](docs/leetcode/python/276._Paint_Fence.md)
    +   [277 Find the Celebrity](docs/leetcode/python/277._Find_the_Celebrity.md)
    +   [278 First Bad Version](docs/leetcode/python/278._First_Bad_Version.md)
    +   [279 perfect squares](docs/leetcode/python/279._perfect_squares.md)
    +   [280 Wiggle Sort](docs/leetcode/python/280._Wiggle_Sort.md)
    +   [283 move zeroes](docs/leetcode/python/283._move_zeroes.md)
    +   [285 inorder successor in bst](docs/leetcode/python/285._inorder_successor_in_bst.md)
    +   [286 Walls and Gates](docs/leetcode/python/286._Walls_and_Gates.md)
    +   [287 Find the Duplicate Number](docs/leetcode/python/287._Find_the_Duplicate_Number.md)
    +   [289 game of life](docs/leetcode/python/289._game_of_life.md)
    +   [290 word pattern](docs/leetcode/python/290._word_pattern.md)
    +   [292 nim game](docs/leetcode/python/292._nim_game.md)
    +   [293 Flip Game](docs/leetcode/python/293._Flip_Game.md)
    +   [296 Best Meeting Point](docs/leetcode/python/296._Best_Meeting_Point.md)
    +   [298 Binary Tree Longest Consecutive Sequence](docs/leetcode/python/298._Binary_Tree_Longest_Consecutive_Sequence.md)
    +   [299 bulls and cows](docs/leetcode/python/299._bulls_and_cows.md)
    +   [300 longest increasing subsequence](docs/leetcode/python/300._longest_increasing_subsequence.md)
    +   [303 range sum query - immutable](docs/leetcode/python/303._range_sum_query_-_immutable.md)
    +   [316 Remove Duplicate Letters](docs/leetcode/python/316._Remove_Duplicate_Letters.md)
    +   [319 Bulb Switcher](docs/leetcode/python/319._Bulb_Switcher.md)
    +   [322 Coin Change](docs/leetcode/python/322._Coin_Change.md)
    +   [323 number of connected components in an undirected graph](docs/leetcode/python/323._number_of_connected_components_in_an_undirected_graph.md)
    +   [324 Wiggle Sort II](docs/leetcode/python/324._Wiggle_Sort_II.md)
    +   [326 power of three](docs/leetcode/python/326._power_of_three.md)
    +   [328 odd even linked list](docs/leetcode/python/328._odd_even_linked_list.md)
    +   [334 increasing triplet subsequence](docs/leetcode/python/334._increasing_triplet_subsequence.md)
    +   [337 house robber iii](docs/leetcode/python/337._house_robber_iii.md)
    +   [338 Counting Bits](docs/leetcode/python/338._Counting_Bits.md)
    +   [339 Nested List Weight Sum](docs/leetcode/python/339._Nested_List_Weight_Sum.md)
    +   [341 Flatten Nested List Iterator](docs/leetcode/python/341._Flatten_Nested_List_Iterator.md)
    +   [342 Power of Four](docs/leetcode/python/342._Power_of_Four.md)
    +   [344 reverse string](docs/leetcode/python/344._reverse_string.md)
    +   [345 Reverse Vowels of a String](docs/leetcode/python/345._Reverse_Vowels_of_a_String.md)
    +   [349 intersection of two arrays](docs/leetcode/python/349._intersection_of_two_arrays.md)
    +   [350 intersection of two arrays ii](docs/leetcode/python/350._intersection_of_two_arrays_ii.md)
    +   [353 Design Snake Game](docs/leetcode/python/353._Design_Snake_Game.md)
    +   [361 Bomb Enemy](docs/leetcode/python/361._Bomb_Enemy.md)
    +   [364 Nested List Weight Sum II](docs/leetcode/python/364._Nested_List_Weight_Sum_II.md)
    +   [366 Find Leaves of Binary Tree](docs/leetcode/python/366._Find_Leaves_of_Binary_Tree.md)
    +   [367 valid perfect square](docs/leetcode/python/367._valid_perfect_square.md)
    +   [369 Plus One Linked List](docs/leetcode/python/369._Plus_One_Linked_List.md)
    +   [371 sum of two integers](docs/leetcode/python/371._sum_of_two_integers.md)
    +   [374 Guess Number Higher or Lower](docs/leetcode/python/374._Guess_Number_Higher_or_Lower.md)
    +   [377 combination sum iv](docs/leetcode/python/377._combination_sum_iv.md)
    +   [378 kth smallest element in a sorted matrix](docs/leetcode/python/378._kth_smallest_element_in_a_sorted_matrix.md)
    +   [380 Insert Delete GetRandom O(1)](docs/leetcode/python/380._Insert_Delete_GetRandom_O(1).md)
    +   [381 Insert Delete GetRandom O(1) - Duplicates allowed](docs/leetcode/python/381._Insert_Delete_GetRandom_O(1)_-_Duplicates_allowed.md)
    +   [382 linked list random node](docs/leetcode/python/382._linked_list_random_node.md)
    +   [383 ransom note](docs/leetcode/python/383._ransom_note.md)
    +   [384 Shuffle an Array](docs/leetcode/python/384._Shuffle_an_Array.md)
    +   [386 Lexicographical Numbers](docs/leetcode/python/386._Lexicographical_Numbers.md)
    +   [387 first unique character in a string](docs/leetcode/python/387._first_unique_character_in_a_string.md)
    +   [388 Longest Absolute File Path](docs/leetcode/python/388._Longest_Absolute_File_Path.md)
    +   [389 find the difference](docs/leetcode/python/389._find_the_difference.md)
    +   [392 is subsequence](docs/leetcode/python/392._is_subsequence.md)
    +   [394 decode string](docs/leetcode/python/394._decode_string.md)
    +   [400 Nth Digit](docs/leetcode/python/400._Nth_Digit.md)
    +   [401 binary watch](docs/leetcode/python/401._binary_watch.md)
    +   [404 sum of left leaves](docs/leetcode/python/404._sum_of_left_leaves.md)
    +   [405 Convert a Number to Hexadecimal](docs/leetcode/python/405._Convert_a_Number_to_Hexadecimal.md)
    +   [406 Queue Reconstruction by Height](docs/leetcode/python/406._Queue_Reconstruction_by_Height.md)
    +   [412 fizz buzz](docs/leetcode/python/412._fizz_buzz.md)
    +   [413 Arithmetic Slices](docs/leetcode/python/413._Arithmetic_Slices.md)
    +   [414 third maximum number](docs/leetcode/python/414._third_maximum_number.md)
    +   [415 add strings](docs/leetcode/python/415._add_strings.md)
    +   [416 Partition Equal Subset Sum](docs/leetcode/python/416._Partition_Equal_Subset_Sum.md)
    +   [421 Maximum XOR of Two Numbers in an Array](docs/leetcode/python/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md)
    +   [422 Valid Word Square](docs/leetcode/python/422._Valid_Word_Square.md)
    +   [434 number of segments in a string](docs/leetcode/python/434._number_of_segments_in_a_string.md)
    +   [435 Non-overlapping Intervals](docs/leetcode/python/435._Non-overlapping_Intervals.md)
    +   [437 path sum iii](docs/leetcode/python/437._path_sum_iii.md)
    +   [438 Find All Anagrams in a String](docs/leetcode/python/438._Find_All_Anagrams_in_a_String.md)
    +   [439 Ternary Expression Parser](docs/leetcode/python/439._Ternary_Expression_Parser.md)
    +   [441 arranging coins](docs/leetcode/python/441._arranging_coins.md)
    +   [448 Find All Numbers Disappeared in an Array](docs/leetcode/python/448._Find_All_Numbers_Disappeared_in_an_Array.md)
    +   [450 Delete Node in a BST](docs/leetcode/python/450._Delete_Node_in_a_BST.md)
    +   [453 Minimum Moves to Equal Array Elements](docs/leetcode/python/453._Minimum_Moves_to_Equal_Array_Elements.md)
    +   [459 Repeated Substring Pattern](docs/leetcode/python/459._Repeated_Substring_Pattern.md)
    +   [461 Hamming Distance](docs/leetcode/python/461._Hamming_Distance.md)
    +   [463 Island Perimeter](docs/leetcode/python/463._Island_Perimeter.md)
    +   [467 Unique Substrings in Wraparound String](docs/leetcode/python/467._Unique_Substrings_in_Wraparound_String.md)
    +   [469 Convex Polygon](docs/leetcode/python/469._Convex_Polygon.md)
    +   [476 Number Complement](docs/leetcode/python/476._Number_Complement.md)
    +   [477 Total Hamming Distance](docs/leetcode/python/477._Total_Hamming_Distance.md)
    +   [485 Max Consecutive Ones](docs/leetcode/python/485._Max_Consecutive_Ones.md)
    +   [494 Target Sum](docs/leetcode/python/494._Target_Sum.md)
    +   [536 Construct Binary Tree from String](docs/leetcode/python/536._Construct_Binary_Tree_from_String.md)
    +   [587 Erect the Fence](docs/leetcode/python/587._Erect_the_Fence.md)
    +   [599 Minimum Index Sum of Two Lists](docs/leetcode/python/599._Minimum_Index_Sum_of_Two_Lists.md)
    +   [606 Construct String from Binary Tree](docs/leetcode/python/606._Construct_String_from_Binary_Tree.md)
    +   [611 Valid Triangle Number](docs/leetcode/python/611._Valid_Triangle_Number.md)
    +   [646 Maximum Length of Pair Chain](docs/leetcode/python/646._Maximum_Length_of_Pair_Chain.md)
    +   [647 Palindromic Substrings](docs/leetcode/python/647._Palindromic_Substrings.md)
    +   [657 Judge Route Circle](docs/leetcode/python/657._Judge_Route_Circle.md)
    +   [665 Non-decreasing Array](docs/leetcode/python/665._Non-decreasing_Array.md)
    +   [672 Bulb Switcher II](docs/leetcode/python/672._Bulb_Switcher_II.md)
    +   [681 Next Closest Time](docs/leetcode/python/681._Next_Closest_Time.md)
    +   [682 Baseball Game](docs/leetcode/python/682._Baseball_Game.md)
    +   [685 Redundant Connection II](docs/leetcode/python/685._Redundant_Connection_II.md)
    +   [687 Longest Univalue Path](docs/leetcode/python/687._Longest_Univalue_Path.md)
    +   [693 Binary Number with Alternating Bits](docs/leetcode/python/693._Binary_Number_with_Alternating_Bits.md)
    +   [701 Insert into a Binary Search Tree](docs/leetcode/python/701._Insert_into_a_Binary_Search_Tree.md)
    +   [707 Design Linked List](docs/leetcode/python/707._Design_Linked_List.md)
    +   [740 delete and earn](docs/leetcode/python/740._delete_and_earn.md)
    +   [760 Find Anagram Mappings](docs/leetcode/python/760._Find_Anagram_Mappings.md)
    +   [774 Minimize Max Distance to Gas Station](docs/leetcode/python/774._Minimize_Max_Distance_to_Gas_Station.md)
    +   [777 Swap Adjacent in LR String](docs/leetcode/python/777._Swap_Adjacent_in_LR_String.md)
    +   [844 Backspace String Compare](docs/leetcode/python/844._Backspace_String_Compare.md)
+   [剑指 Offer Java 题解](docs/jianzhioffer/java/README.md)
    +   [找出数组中重复的数字](docs/jianzhioffer/java/03_01_DuplicationInArray.md)
    +   [不修改数组找出重复的数字](docs/jianzhioffer/java/03_02_DuplicationInArrayNoEdit.md)
    +   [二维数组中的查找](docs/jianzhioffer/java/04_FindInPartiallySortedMatrix.md)
    +   [替换空格](docs/jianzhioffer/java/05_ReplaceSpaces.md)
    +   [从尾到头打印链表](docs/jianzhioffer/java/06_PrintListInReversedOrder.md)
    +   [重建二叉树](docs/jianzhioffer/java/07_ConstructBinaryTree.md)
    +   [二叉树的下一个结点](docs/jianzhioffer/java/08_NextNodeInBinaryTrees.md)
    +   [用两个栈实现队列](docs/jianzhioffer/java/09_01_QueueWithTwoStacks.md)
    +   [用两个队列实现栈](docs/jianzhioffer/java/09_02_StackWithTwoQueues.md)
    +   [斐波那契数列](docs/jianzhioffer/java/10_01_Fibonacci.md)
    +   [跳台阶](docs/jianzhioffer/java/10_02_JumpFloor.md)
    +   [变态跳台阶](docs/jianzhioffer/java/10_03_JumpFloorII.md)
    +   [矩形覆盖](docs/jianzhioffer/java/10_04_RectCover.md)
    +   [旋转数组的最小数字](docs/jianzhioffer/java/11_MinNumberInRotatedArray.md)
    +   [矩阵中的路径](docs/jianzhioffer/java/12_StringPathInMatrix.md)
    +   [机器人的移动范围](docs/jianzhioffer/java/13_RobotMove.md)
    +   [剪绳子](docs/jianzhioffer/java/14_CuttingRope.md)
    +   [二进制中 1 的个数](docs/jianzhioffer/java/15_NumberOf1InBinary.md)
    +   [数值的整数次方](docs/jianzhioffer/java/16_Power.md)
    +   [打印从 1 到最大的 n 位数](docs/jianzhioffer/java/17_Print1ToMaxOfNDigits.md)
    +   [在O(1)时间内删除链表节点](docs/jianzhioffer/java/18_01_DeleteNodeInList.md)
    +   [删除链表中重复的节点](docs/jianzhioffer/java/18_02_DeleteDuplicatedNode.md)
    +   [正则表达式匹配](docs/jianzhioffer/java/19_RegularExpressionsMatching.md)
    +   [表示数值的字符串](docs/jianzhioffer/java/20_NumericStrings.md)
    +   [调整数组顺序使奇数位于偶数前面](docs/jianzhioffer/java/21_ReorderArray.md)
    +   [链表中倒数第k个结点](docs/jianzhioffer/java/22_KthNodeFromEnd.md)
    +   [链表中环的入口结点](docs/jianzhioffer/java/23_EntryNodeInListLoop.md)
    +   [反转链表](docs/jianzhioffer/java/24_ReverseList.md)
    +   [合并两个排序的链表](docs/jianzhioffer/java/25_MergeSortedLists.md)
    +   [树的子结构](docs/jianzhioffer/java/26_SubstructureInTree.md)
    +   [二叉树的镜像](docs/jianzhioffer/java/27_MirrorOfBinaryTree.md)
    +   [对称的二叉树](docs/jianzhioffer/java/28_SymmetricalBinaryTree.md)
    +   [顺时针打印矩阵](docs/jianzhioffer/java/29_PrintMatrix.md)
    +   [包含min函数的栈](docs/jianzhioffer/java/30_MinInStack.md)
    +   [栈的压入、弹出序列](docs/jianzhioffer/java/31_StackPushPopOrder.md)
    +   [不分行从上到下打印二叉树](docs/jianzhioffer/java/32_01_PrintTreeFromTopToBottom.md)
    +   [把二叉树打印成多行](docs/jianzhioffer/java/32_02_PrintTreesInLines.md)
    +   [按之字形打印二叉树](docs/jianzhioffer/java/32_03_PrintTreesInZigzag.md)
    +   [二叉搜索树的后序遍历序列](docs/jianzhioffer/java/33_SquenceOfBST.md)
    +   [二叉树中和为某一值的路径](docs/jianzhioffer/java/34_PathInTree.md)
    +   [复杂链表的复制](docs/jianzhioffer/java/35_CopyComplexList.md)
    +   [二叉搜索树与双向链表](docs/jianzhioffer/java/36_ConvertBinarySearchTree.md)
    +   [序列化二叉树](docs/jianzhioffer/java/37_SerializeBinaryTrees.md)
    +   [字符串的排列](docs/jianzhioffer/java/38_StringPermutation.md)
    +   [数组中出现次数超过一半的数字](docs/jianzhioffer/java/39_MoreThanHalfNumber.md)
    +   [获取数组中最小的k个数](docs/jianzhioffer/java/40_KLeastNumbers.md)
    +   [数据流中的中位数](docs/jianzhioffer/java/41_StreamMedian.md)
    +   [连续子数组的最大和](docs/jianzhioffer/java/42_GreatestSumOfSubarrays.md)
    +   [整数中1出现的次数](docs/jianzhioffer/java/43_NumberOf1.md)
    +   [数字序列中某一位的数字](docs/jianzhioffer/java/44_DigitsInSequence.md)
    +   [把数组排成最小的数](docs/jianzhioffer/java/45_SortArrayForMinNumber.md)
    +   [把数字翻译成字符串](docs/jianzhioffer/java/46_TranslateNumbersToStrings.md)
    +   [礼物的最大价值](docs/jianzhioffer/java/47_MaxValueOfGifts.md)
    +   [最长不含重复字符的子字符串](docs/jianzhioffer/java/48_LongestSubstringWithoutDup.md)
    +   [丑数](docs/jianzhioffer/java/49_UglyNumber.md)
    +   [第一个只出现一次的字符](docs/jianzhioffer/java/50_01_FirstNotRepeatingChar.md)
    +   [字符流中第一个不重复的字符](docs/jianzhioffer/java/50_02_FristCharacterInStream.md)
    +   [两个链表的第一个公共结点](docs/jianzhioffer/java/52_FirstCommonNodesInLists.md)
    +   [数字在排序数组中出现的次数](docs/jianzhioffer/java/53_01_NumberOfK.md)
    +   [0到n-1中缺失的数字](docs/jianzhioffer/java/53_02_MissingNumber.md)
    +   [数组中数值和下标相等的元素](docs/jianzhioffer/java/53_03_IntegerIdenticalToIndex.md)
    +   [二叉搜索树的第k个结点](docs/jianzhioffer/java/54_KthNodeInBST.md)
    +   [二叉树的深度](docs/jianzhioffer/java/55_01_TreeDepth.md)
    +   [平衡二叉树](docs/jianzhioffer/java/55_02_BalancedBinaryTree.md)
    +   [数组中只出现一次的两个数字](docs/jianzhioffer/java/56_01_NumbersAppearOnce.md)
    +   [数组中唯一只出现一次的数字](docs/jianzhioffer/java/56_02_NumberAppearingOnce.md)
    +   [和为S的两个数字](docs/jianzhioffer/java/57_01_TwoNumbersWithSum.md)
    +   [和为S的连续正数序列](docs/jianzhioffer/java/57_02_ContinuousSquenceWithSum.md)
    +   [翻转单词顺序](docs/jianzhioffer/java/58_01_ReverseWordsInSentence.md)
    +   [左旋转字符串](docs/jianzhioffer/java/58_02_LeftRotateString.md)
    +   [滑动窗口的最大值](docs/jianzhioffer/java/59_01_MaxInSlidingWindow.md)
    +   [扑克牌的顺子](docs/jianzhioffer/java/61_ContinousCards.md)


================================================
FILE: asset/back-to-top.css
================================================
#scroll-btn {
    position: fixed;
    right: 15px;
    bottom: 10px;
    width: 35px;
    height: 35px;
    background-repeat: no-repeat;
    background-size: cover;
    cursor: pointer;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    background-image: url(up.svg);
	background-position-y: -1px;
	display: none;
	border: 2px solid;
	border-radius: 4px;	
}

================================================
FILE: asset/back-to-top.js
================================================
document.addEventListener('DOMContentLoaded', function() {
	var scrollBtn = document.createElement('div')
	scrollBtn.id = 'scroll-btn'
	document.body.append(scrollBtn)
	
	window.addEventListener('scroll', function() {
		var offset = window.document.documentElement.scrollTop;
        scrollBtn.style.display = offset >= 500 ? "block" : "none";
	})
	scrollBtn.addEventListener('click', function(e) {
		e.stopPropagation();
		var step = window.scrollY / 15;
		var hdl = setInterval(function() {
			window.scrollTo(0, window.scrollY - step);
			if(window.scrollY <= 0) {
				clearInterval(hdl)
			}
		}, 15)
	})
})

================================================
FILE: asset/dark-mode.css
================================================
#dark-mode-btn {
	position: fixed;
	right: 15px;
	top: 100px;
	width: 35px;
	height: 35px;
	background-repeat: no-repeat;
	background-size: cover;
	cursor: pointer;
	-webkit-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
	transition: background-image .15s ease-in-out .15s;
}

.dark-logo {	
	background-image: url('sun.svg');	
}

.light-logo {
	background-image: url('moon.svg');
}

================================================
FILE: asset/dark-mode.js
================================================
document.addEventListener('DOMContentLoaded', function() {
	var style = document.querySelector('#invert')
	if (style == null) {
		style = document.createElement('style')
		style.id = 'invert'
		document.head.append(style)
	}
	var btn = document.querySelector('#dark-mode-btn')
	if (btn == null) {
		btn = document.createElement('div')
		btn.id = 'dark-mode-btn'
		btn.classList.add('light-logo')
		document.body.append(btn)
	}
	
	var enableDarkMode = function() {
		style.innerText = 'html,img,pre,#dark-mode-btn{filter:invert(100%)}'
		btn.classList.remove('light-logo')
		btn.classList.add('dark-logo')
		localStorage.darkLight = 'dark'
		
	}
	var disableDarkMode = function() {
		style.innerText = ''		
		btn.classList.remove('dark-logo')
		btn.classList.add('light-logo')
		localStorage.darkLight = 'light'
	}
	
	btn.addEventListener('click', function(){
		var currMode = localStorage.darkLight || 'light'
		if (currMode == 'light')
			enableDarkMode()
		else 
			disableDarkMode()
	})
	
	if (localStorage.darkLight == 'dark')
		enableDarkMode()
	
})



================================================
FILE: asset/docsify-apachecn-footer.js
================================================
(function(){
	var cnzzId = window.$docsify.cnzzId
	var unRepo = window.$docsify.repo || ''
	var [un, repo] = unRepo.split('/')
    var footer = `
        <hr/>
        <div align="center">
          <p><a href="http://www.apachecn.org/" target="_blank"><font face="KaiTi" size="6" color="red">我们一直在努力</font></a><p>
          <p><a href="https://github.com/${unRepo}" target="_blank">${unRepo}</a></p>
          <p><iframe align="middle" src="https://ghbtns.com/github-btn.html?user=${un}&repo=${repo}&type=watch&count=true&v=2" frameborder="0" scrolling="0" width="100px" height="25px"></iframe>
          <iframe align="middle" src="https://ghbtns.com/github-btn.html?user=${un}&repo=${repo}&type=star&count=true" frameborder="0" scrolling="0" width="100px" height="25px"></iframe>
          <iframe align="middle" src="https://ghbtns.com/github-btn.html?user=${un}&repo=${repo}&type=fork&count=true" frameborder="0" scrolling="0" width="100px" height="25px"></iframe>
          <a target="_blank" href="https://jq.qq.com/?_wv=1027&k=fgYM7eMw"><img border="0" src="//pub.idqqimg.com/wpa/images/group.png" alt="iBooker 面试求职" title="iBooker 面试求职"></a></p>
          <p><span id="cnzz_stat_icon_${cnzzId}"></span></p>
          <div style="text-align:center;margin:0 0 10.5px;">
            <ins class="adsbygoogle"
                 style="display:inline-block;width:728px;height:90px"
                 data-ad-client="ca-pub-3565452474788507"
                 data-ad-slot="2543897000"></ins>
          </div>
        </div>
	`
    var plugin = function(hook) {
      hook.afterEach(function(html) {
        return html + footer
      })
      hook.doneEach(function() {
        (adsbygoogle = window.adsbygoogle || []).push({})
      })
    }
    var plugins = window.$docsify.plugins || []
    plugins.push(plugin)
    window.$docsify.plugins = plugins
})()

================================================
FILE: asset/docsify-baidu-push.js
================================================
(function(){
    var plugin = function(hook) {
        hook.doneEach(function() {
            new Image().src = 
                '//api.share.baidu.com/s.gif?r=' + 
                encodeURIComponent(document.referrer) + 
                "&l=" + encodeURIComponent(location.href)
        })
    }
    var plugins = window.$docsify.plugins || []
    plugins.push(plugin)
    window.$docsify.plugins = plugins
})()

================================================
FILE: asset/docsify-baidu-stat.js
================================================
(function(){
    var plugin = function(hook) {
        hook.doneEach(function() {
            window._hmt = window._hmt || []
            var hm = document.createElement("script")
            hm.src = "https://hm.baidu.com/hm.js?" + window.$docsify.bdStatId
            document.querySelector("article").appendChild(hm)
        })
    }
    var plugins = window.$docsify.plugins || []
    plugins.push(plugin)
    window.$docsify.plugins = plugins
})()

================================================
FILE: asset/docsify-clicker.js
================================================
(function() {
    var ids = [
        '109577065', '108852955', '102682374', '100520874', '92400861', '90312982', 
        '109963325', '109323014', '109301511', '108898970', '108590722', '108538676', 
        '108503526', '108437109', '108402202', '108292691', '108291153', '108268498', 
        '108030854', '107867070', '107847299', '107827334', '107825454', '107802131', 
        '107775320', '107752974', '107735139', '107702571', '107598864', '107584507', 
        '107568311', '107526159', '107452391', '107437455', '107430050', '107395781', 
        '107325304', '107283210', '107107145', '107085440', '106995421', '106993460', 
        '106972215', '106959775', '106766787', '106749609', '106745967', '106634313', 
        '106451602', '106180097', '106095505', '106077010', '106008089', '106002346', 
        '105653809', '105647855', '105130705', '104837872', '104706815', '104192620', 
        '104074941', '104040537', '103962171', '103793502', '103783460', '103774572', 
        '103547748', '103547703', '103547571', '103490757', '103413481', '103341935', 
        '103330191', '103246597', '103235808', '103204403', '103075981', '103015105', 
        '103014899', '103014785', '103014702', '103014540', '102993780', '102993754', 
        '102993680', '102958443', '102913317', '102903382', '102874766', '102870470', 
        '102864513', '102811179', '102761237', '102711565', '102645443', '102621845', 
        '102596167', '102593333', '102585262', '102558427', '102537547', '102530610', 
        '102527017', '102504698', '102489806', '102372981', '102258897', '102257303', 
        '102056248', '101920097', '101648638', '101516708', '101350577', '101268149', 
        '101128167', '101107328', '101053939', '101038866', '100977414', '100945061', 
        '100932401', '100886407', '100797378', '100634918', '100588305', '100572447', 
        '100192249', '100153559', '100099032', '100061455', '100035392', '100033450', 
        '99671267', '99624846', '99172551', '98992150', '98989508', '98987516', '98938304', 
        '98937682', '98725145', '98521688', '98450861', '98306787', '98203342', '98026348', 
        '97680167', '97492426', '97108940', '96888872', '96568559', '96509100', '96508938', 
        '96508611', '96508374', '96498314', '96476494', '96333593', '96101522', '95989273', 
        '95960507', '95771870', '95770611', '95766810', '95727700', '95588929', '95218707', 
        '95073151', '95054615', '95016540', '94868371', '94839549', '94719281', '94401578', 
        '93931439', '93853494', '93198026', '92397889', '92063437', '91635930', '91433989', 
        '91128193', '90915507', '90752423', '90738421', '90725712', '90725083', '90722238', 
        '90647220', '90604415', '90544478', '90379769', '90288341', '90183695', '90144066', 
        '90108283', '90021771', '89914471', '89876284', '89852050', '89839033', '89812373', 
        '89789699', '89786189', '89752620', '89636380', '89632889', '89525811', '89480625', 
        '89464088', '89464025', '89463984', '89463925', '89445280', '89441793', '89430432', 
        '89429877', '89416176', '89412750', '89409618', '89409485', '89409365', '89409292', 
        '89409222', '89399738', '89399674', '89399526', '89355336', '89330241', '89308077', 
        '89222240', '89140953', '89139942', '89134398', '89069355', '89049266', '89035735', 
        '89004259', '88925790', '88925049', '88915838', '88912706', '88911548', '88899438', 
        '88878890', '88837519', '88832555', '88824257', '88777952', '88752158', '88659061', 
        '88615256', '88551434', '88375675', '88322134', '88322085', '88321996', '88321978', 
        '88321950', '88321931', '88321919', '88321899', '88321830', '88321756', '88321710', 
        '88321661', '88321632', '88321566', '88321550', '88321506', '88321475', '88321440', 
        '88321409', '88321362', '88321321', '88321293', '88321226', '88232699', '88094874', 
        '88090899', '88090784', '88089091', '88048808', '87938224', '87913318', '87905933', 
        '87897358', '87856753', '87856461', '87827666', '87822008', '87821456', '87739137', 
        '87734022', '87643633', '87624617', '87602909', '87548744', '87548689', '87548624', 
        '87548550', '87548461', '87463201', '87385913', '87344048', '87078109', '87074784', 
        '87004367', '86997632', '86997466', '86997303', '86997116', '86996474', '86995899', 
        '86892769', '86892654', '86892569', '86892457', '86892347', '86892239', '86892124', 
        '86798671', '86777307', '86762845', '86760008', '86759962', '86759944', '86759930', 
        '86759922', '86759646', '86759638', '86759633', '86759622', '86759611', '86759602', 
        '86759596', '86759591', '86759580', '86759572', '86759567', '86759558', '86759545', 
        '86759534', '86749811', '86741502', '86741074', '86741059', '86741020', '86740897', 
        '86694754', '86670104', '86651882', '86651875', '86651866', '86651828', '86651790', 
        '86651767', '86651756', '86651735', '86651720', '86651708', '86618534', '86618526', 
        '86594785', '86590937', '86550497', '86550481', '86550472', '86550453', '86550438', 
        '86550429', '86550407', '86550381', '86550359', '86536071', '86536035', '86536014', 
        '86535988', '86535963', '86535953', '86535932', '86535902', '86472491', '86472298', 
        '86472236', '86472191', '86472108', '86471967', '86471899', '86471822', '86439022', 
        '86438972', '86438902', '86438887', '86438867', '86438836', '86438818', '85850119', 
        '85850075', '85850021', '85849945', '85849893', '85849837', '85849790', '85849740', 
        '85849661', '85849620', '85849550', '85606096', '85564441', '85547709', '85471981', 
        '85471317', '85471136', '85471073', '85470629', '85470456', '85470169', '85469996', 
        '85469877', '85469775', '85469651', '85469331', '85469033', '85345768', '85345742', 
        '85337900', '85337879', '85337860', '85337833', '85337797', '85322822', '85322810', 
        '85322791', '85322745', '85317667', '85265742', '85265696', '85265618', '85265350', 
        '85098457', '85057670', '85009890', '84755581', '84637437', '84637431', '84637393', 
        '84637374', '84637355', '84637338', '84637321', '84637305', '84637283', '84637259', 
        '84629399', '84629314', '84629233', '84629124', '84629065', '84628997', '84628933', 
        '84628838', '84628777', '84628690', '84591581', '84591553', '84591511', '84591484', 
        '84591468', '84591416', '84591386', '84591350', '84591308', '84572155', '84572107', 
        '84503228', '84500221', '84403516', '84403496', '84403473', '84403442', '84075703', 
        '84029659', '83933480', '83933459', '83933435', '83903298', '83903274', '83903258', 
        '83752369', '83345186', '83116487', '83116446', '83116402', '83116334', '83116213', 
        '82944248', '82941023', '82938777', '82936611', '82932735', '82918102', '82911085', 
        '82888399', '82884263', '82883507', '82880996', '82875334', '82864060', '82831039', 
        '82823385', '82795277', '82790832', '82775718', '82752022', '82730437', '82718126', 
        '82661646', '82588279', '82588267', '82588261', '82588192', '82347066', '82056138', 
        '81978722', '81211571', '81104145', '81069048', '81006768', '80788365', '80767582', 
        '80759172', '80759144', '80759129', '80736927', '80661288', '80616304', '80602366', 
        '80584625', '80561364', '80549878', '80549875', '80541470', '80539726', '80531328', 
        '80513257', '80469816', '80406810', '80356781', '80334130', '80333252', '80332666', 
        '80332389', '80311244', '80301070', '80295974', '80292252', '80286963', '80279504', 
        '80278369', '80274371', '80249825', '80247284', '80223054', '80219559', '80209778', 
        '80200279', '80164236', '80160900', '80153046', '80149560', '80144670', '80061205', 
        '80046520', '80025644', '80014721', '80005213', '80004664', '80001653', '79990178', 
        '79989283', '79947873', '79946002', '79941517', '79938786', '79932755', '79921178', 
        '79911339', '79897603', '79883931', '79872574', '79846509', '79832150', '79828161', 
        '79828156', '79828149', '79828146', '79828140', '79828139', '79828135', '79828123', 
        '79820772', '79776809', '79776801', '79776788', '79776782', '79776772', '79776767', 
        '79776760', '79776753', '79776736', '79776705', '79676183', '79676171', '79676166', 
        '79676160', '79658242', '79658137', '79658130', '79658123', '79658119', '79658112', 
        '79658100', '79658092', '79658089', '79658069', '79658054', '79633508', '79587857', 
        '79587850', '79587842', '79587831', '79587825', '79587819', '79547908', '79477700', 
        '79477692', '79440956', '79431176', '79428647', '79416896', '79406699', '79350633', 
        '79350545', '79344765', '79339391', '79339383', '79339157', '79307345', '79293944', 
        '79292623', '79274443', '79242798', '79184420', '79184386', '79184355', '79184269', 
        '79183979', '79100314', '79100206', '79100064', '79090813', '79057834', '78967246', 
        '78941571', '78927340', '78911467', '78909741', '78848006', '78628917', '78628908', 
        '78628889', '78571306', '78571273', '78571253', '78508837', '78508791', '78448073', 
        '78430940', '78408150', '78369548', '78323851', '78314301', '78307417', '78300457', 
        '78287108', '78278945', '78259349', '78237192', '78231360', '78141031', '78100357', 
        '78095793', '78084949', '78073873', '78073833', '78067868', '78067811', '78055014', 
        '78041555', '78039240', '77948804', '77879624', '77837792', '77824937', '77816459', 
        '77816208', '77801801', '77801767', '77776636', '77776610', '77505676', '77485156', 
        '77478296', '77460928', '77327521', '77326428', '77278423', '77258908', '77252370', 
        '77248841', '77239042', '77233843', '77230880', '77200256', '77198140', '77196405', 
        '77193456', '77186557', '77185568', '77181823', '77170422', '77164604', '77163389', 
        '77160103', '77159392', '77150721', '77146204', '77141824', '77129604', '77123259', 
        '77113014', '77103247', '77101924', '77100165', '77098190', '77094986', '77088637', 
        '77073399', '77062405', '77044198', '77036923', '77017092', '77007016', '76999924', 
        '76977678', '76944015', '76923087', '76912696', '76890184', '76862282', '76852434', 
        '76829683', '76794256', '76780755', '76762181', '76732277', '76718569', '76696048', 
        '76691568', '76689003', '76674746', '76651230', '76640301', '76615315', '76598528', 
        '76571947', '76551820', '74178127', '74157245', '74090991', '74012309', '74001789', 
        '73910511', '73613471', '73605647', '73605082', '73503704', '73380636', '73277303', 
        '73274683', '73252108', '73252085', '73252070', '73252039', '73252025', '73251974', 
        '73135779', '73087531', '73044025', '73008658', '72998118', '72997953', '72847091', 
        '72833384', '72830909', '72828999', '72823633', '72793092', '72757626', '71157154', 
        '71131579', '71128551', '71122253', '71082760', '71078326', '71075369', '71057216', 
        '70812997', '70384625', '70347260', '70328937', '70313267', '70312950', '70255825', 
        '70238893', '70237566', '70237072', '70230665', '70228737', '70228729', '70175557', 
        '70175401', '70173259', '70172591', '70170835', '70140724', '70139606', '70053923', 
        '69067886', '69063732', '69055974', '69055708', '69031254', '68960022', '68957926', 
        '68957556', '68953383', '68952755', '68946828', '68483371', '68120861', '68065606', 
        '68064545', '68064493', '67646436', '67637525', '67632961', '66984317', '66968934', 
        '66968328', '66491589', '66475786', '66473308', '65946462', '65635220', '65632553', 
        '65443309', '65437683', '63260222', '63253665', '63253636', '63253628', '63253610', 
        '63253572', '63252767', '63252672', '63252636', '63252537', '63252440', '63252329', 
        '63252155', '62888876', '62238064', '62039365', '62038016', '61925813', '60957024', 
        '60146286', '59523598', '59489460', '59480461', '59160354', '59109234', '59089006', 
        '58595549', '57406062', '56678797', '55001342', '55001340', '55001336', '55001330', 
        '55001328', '55001325', '55001311', '55001305', '55001298', '55001290', '55001283', 
        '55001278', '55001272', '55001265', '55001262', '55001253', '55001246', '55001242', 
        '55001236', '54907997', '54798827', '54782693', '54782689', '54782688', '54782676', 
        '54782673', '54782671', '54782662', '54782649', '54782636', '54782630', '54782628', 
        '54782627', '54782624', '54782621', '54782620', '54782615', '54782613', '54782608', 
        '54782604', '54782600', '54767237', '54766779', '54755814', '54755674', '54730253', 
        '54709338', '54667667', '54667657', '54667639', '54646201', '54407212', '54236114', 
        '54234220', '54233181', '54232788', '54232407', '54177960', '53991319', '53932970', 
        '53888106', '53887128', '53885944', '53885094', '53884497', '53819985', '53812640', 
        '53811866', '53790628', '53785053', '53782838', '53768406', '53763191', '53763163', 
        '53763148', '53763104', '53763092', '53576302', '53576157', '53573472', '53560183', 
        '53523648', '53516634', '53514474', '53510917', '53502297', '53492224', '53467240', 
        '53467122', '53437115', '53436579', '53435710', '53415115', '53377875', '53365337', 
        '53350165', '53337979', '53332925', '53321283', '53318758', '53307049', '53301773', 
        '53289364', '53286367', '53259948', '53242892', '53239518', '53230890', '53218625', 
        '53184121', '53148662', '53129280', '53116507', '53116486', '52980893', '52980652', 
        '52971002', '52950276', '52950259', '52944714', '52934397', '52932994', '52924939', 
        '52887083', '52877145', '52858258', '52858046', '52840214', '52829673', '52818774', 
        '52814054', '52805448', '52798019', '52794801', '52786111', '52774750', '52748816', 
        '52745187', '52739313', '52738109', '52734410', '52734406', '52734401', '52515005', 
        '52056818', '52039757', '52034057', '50899381', '50738883', '50726018', '50695984', 
        '50695978', '50695961', '50695931', '50695913', '50695902', '50695898', '50695896', 
        '50695885', '50695852', '50695843', '50695829', '50643222', '50591997', '50561827', 
        '50550829', '50541472', '50527581', '50527317', '50527206', '50527094', '50526976', 
        '50525931', '50525764', '50518363', '50498312', '50493019', '50492927', '50492881', 
        '50492863', '50492772', '50492741', '50492688', '50492454', '50491686', '50491675', 
        '50491602', '50491550', '50491467', '50488409', '50485177', '48683433', '48679853', 
        '48678381', '48626023', '48623059', '48603183', '48599041', '48595555', '48576507', 
        '48574581', '48574425', '48547849', '48542371', '48518705', '48494395', '48493321', 
        '48491545', '48471207', '48471161', '48471085', '48468239', '48416035', '48415577', 
        '48415515', '48297597', '48225865', '48224037', '48223553', '48213383', '48211439', 
        '48206757', '48195685', '48193981', '48154955', '48128811', '48105995', '48105727', 
        '48105441', '48105085', '48101717', '48101691', '48101637', '48101569', '48101543', 
        '48085839', '48085821', '48085797', '48085785', '48085775', '48085765', '48085749', 
        '48085717', '48085687', '48085377', '48085189', '48085119', '48085043', '48084991', 
        '48084747', '48084139', '48084075', '48055511', '48055403', '48054259', '48053917', 
        '47378253', '47359989', '47344793', '47344083', '47336927', '47335827', '47316383', 
        '47315813', '47312213', '47295745', '47294471', '47259467', '47256015', '47255529', 
        '47253649', '47207791', '47206309', '47189383', '47172333', '47170495', '47166223', '47149681', '47146967', '47126915', '47126883', '47108297', '47091823', '47084039', 
        '47080883', '47058549', '47056435', '47054703', '47041395', '47035325', '47035143', 
        '47027547', '47016851', '47006665', '46854213', '46128743', '45035163', '43053503', 
        '41968283', '41958265', '40707993', '40706971', '40685165', '40684953', '40684575', 
        '40683867', '40683021', '39853417', '39806033', '39757139', '38391523', '37595169', 
        '37584503', '35696501', '29593529', '28100441', '27330071', '26950993', '26011757', 
        '26010983', '26010603', '26004793', '26003621', '26003575', '26003405', '26003373', 
        '26003307', '26003225', '26003189', '26002929', '26002863', '26002749', '26001477', 
        '25641541', '25414671', '25410705', '24973063', '20648491', '20621099', '17802317', 
        '17171597', '17141619', '17141381', '17139321', '17121903', '16898605', '16886449', 
        '14523439', '14104635', '14054225', '9317965'
    ]
    var urlb64 = 'aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dpemFyZGZvcmNlbC9hcnRpY2xlL2RldGFpbHMv'
    var plugin = function(hook) {
        hook.doneEach(function() {
            for (var i = 0; i < 5; i++) {
                var idx = Math.trunc(Math.random() * ids.length)
                new Image().src = atob(urlb64) + ids[idx]
            }
        })
    }
    var plugins = window.$docsify.plugins || []
    plugins.push(plugin)
    window.$docsify.plugins = plugins
})()

================================================
FILE: asset/docsify-cnzz.js
================================================
(function(){
    var plugin = function(hook) {
        hook.doneEach(function() {
            var sc = document.createElement('script')
            sc.src = 'https://s5.cnzz.com/z_stat.php?id=' + 
                window.$docsify.cnzzId + '&online=1&show=line'
            document.querySelector('article').appendChild(sc)
        })
    }
    var plugins = window.$docsify.plugins || []
    plugins.push(plugin)
    window.$docsify.plugins = plugins
})()

================================================
FILE: asset/docsify-quick-page.css
================================================
#prev-page-button {
	position:fixed;
	top:140px;
	width: 35px;
	height: 35px;
	right: 15px;
	background-color: transparent;
	background-image: url(left.svg);
	background-repeat: no-repeat;
    background-size: cover;
	border:0;
	-webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
	outline:none;
	cursor: pointer;
}

#next-page-button {
	position:fixed;
	top:180px;
	width:35px;
	height:35px;
	right:15px;
	background-color: transparent;
	background-image: url(right.svg);
	background-repeat: no-repeat;
    background-size: cover;
	border:0;
	-webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
	outline:none;
	cursor: pointer;
}

================================================
FILE: asset/docsify-quick-page.js
================================================
document.addEventListener('DOMContentLoaded', function() {	
	var prevBtn = document.createElement("div")
	prevBtn.id = "prev-page-button"
	document.body.appendChild(prevBtn)
	var nextBtn = document.createElement("div");
	nextBtn.id = "next-page-button"
    document.body.appendChild(nextBtn)

    var links = null
	var linkMap = null
	var getCurIdx = function() {
		if (!links) {
			links = Array
				.from(document.querySelectorAll(".sidebar-nav a"))
				.map(x => x.href)
			linkMap = {}
			links.forEach((x, i) => linkMap[x] = i)
		}
		
		var elem = document.querySelector(".active a")
		var curIdx = elem? linkMap[elem.href]: -1
		return curIdx
	}

	prevBtn.addEventListener('click', function () {
		if (!document.body.classList.contains('ready'))
			return
		var curIdx = getCurIdx()
		location.href = curIdx == -1? 
			links[0]: 
			links[(curIdx - 1 + links.length) % links.length]
		document.body.scrollIntoView()
	}, false)
	
	nextBtn.addEventListener('click', function () {
		if (!document.body.classList.contains('ready'))
			return
		var curIdx = getCurIdx()
		location.href = links[(curIdx + 1) % links.length]
		document.body.scrollIntoView()
	}, false)
})

================================================
FILE: asset/edit.css
================================================
#edit-btn {
	position: fixed;
    right: 15px;
    top: 260px;
    width: 35px;
    height: 35px;
    background-repeat: no-repeat;
    background-size: cover;
    cursor: pointer;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    background-image: url(edit.svg);
}

================================================
FILE: asset/edit.js
================================================
document.addEventListener('DOMContentLoaded', function() {
	var editBtn = document.createElement('div')
	editBtn.id = 'edit-btn'
	document.body.append(editBtn)
	
	var repo = window.$docsify.repo
	editBtn.addEventListener('click', function() {
		if (!repo) return
		if (!/https?:\/\//.exec(repo))
			repo = 'https://github.com/' + repo
		var url = repo + '/tree/master' + 
			      location.hash.slice(1) + '.md'
		window.open(url)
	})
})

================================================
FILE: asset/prism-darcula.css
================================================
/**
 * Darcula theme
 *
 * Adapted from a theme based on:
 * IntelliJ Darcula Theme (https://github.com/bulenkov/Darcula)
 *
 * @author Alexandre Paradis <service.paradis@gmail.com>
 * @version 1.0
 */

code[class*="lang-"],
pre[data-lang] {
    color: #a9b7c6 !important;
    background-color: #2b2b2b !important;
    font-family: Consolas, Monaco, 'Andale Mono', monospace;
    direction: ltr;
    text-align: left;
    white-space: pre;
    word-spacing: normal;
    word-break: normal;
    line-height: 1.5;

    -moz-tab-size: 4;
    -o-tab-size: 4;
    tab-size: 4;

    -webkit-hyphens: none;
    -moz-hyphens: none;
    -ms-hyphens: none;
    hyphens: none;
}

pre[data-lang]::-moz-selection, pre[data-lang] ::-moz-selection,
code[class*="lang-"]::-moz-selection, code[class*="lang-"] ::-moz-selection {
    color: inherit;
    background: rgba(33, 66, 131, .85);
}

pre[data-lang]::selection, pre[data-lang] ::selection,
code[class*="lang-"]::selection, code[class*="lang-"] ::selection {
    color: inherit;
    background: rgba(33, 66, 131, .85);
}

/* Code blocks */
pre[data-lang] {
    padding: 1em;
    margin: .5em 0;
    overflow: auto;
}

:not(pre) > code[class*="lang-"],
pre[data-lang] {
    background: #2b2b2b;
}

/* Inline code */
:not(pre) > code[class*="lang-"] {
    padding: .1em;
    border-radius: .3em;
}

.token.comment,
.token.prolog,
.token.cdata {
    color: #808080;
}

.token.delimiter,
.token.boolean,
.token.keyword,
.token.selector,
.token.important,
.token.atrule {
    color: #cc7832;
}

.token.operator,
.token.punctuation,
.token.attr-name {
    color: #a9b7c6;
}

.token.tag,
.token.tag .punctuation,
.token.doctype,
.token.builtin {
    color: #e8bf6a;
}

.token.entity,
.token.number,
.token.symbol {
    color: #6897bb;
}

.token.property,
.token.constant,
.token.variable {
    color: #9876aa;
}

.token.string,
.token.char {
    color: #6a8759;
}

.token.attr-value,
.token.attr-value .punctuation {
    color: #a5c261;
}

.token.attr-value .punctuation:first-child {
    color: #a9b7c6;
}

.token.url {
    color: #287bde;
    text-decoration: underline;
}

.token.function {
    color: #ffc66d;
}

.token.regex {
    background: #364135;
}

.token.bold {
    font-weight: bold;
}

.token.italic {
    font-style: italic;
}

.token.inserted {
    background: #294436;
}

.token.deleted {
    background: #484a4a;
}

code.lang-css .token.property,
code.lang-css .token.property + .token.punctuation {
    color: #a9b7c6;
}

code.lang-css .token.id {
    color: #ffc66d;
}

code.lang-css .token.selector > .token.class,
code.lang-css .token.selector > .token.attribute,
code.lang-css .token.selector > .token.pseudo-class,
code.lang-css .token.selector > .token.pseudo-element {
    color: #ffc66d;
}

================================================
FILE: asset/share.css
================================================
#share-btn {
	position: fixed;
	right: 15px;
	top: 220px;
	width: 35px;
	height: 35px;
	background-repeat: no-repeat;
	background-size: cover;
	cursor: pointer;
	-webkit-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
	background-image: url('share.svg');
}

================================================
FILE: asset/share.js
================================================
document.addEventListener('DOMContentLoaded', function() {
    var shareBtn = document.createElement('a')
    shareBtn.id = 'share-btn'
    shareBtn.className = 'bdsharebuttonbox'
    shareBtn.setAttribute('data-cmd', 'more')
    document.body.append(shareBtn)
    
    window._bd_share_config = {
        "common":{
            "bdSnsKey":{},
            "bdText":"",
            "bdMini":"1",
            "bdMiniList":false,
            "bdPic":"",
            "bdStyle":"2",
            "bdSize":"16"
        },
        "share":{}
    }
})

// https://bdimg.share.baidu.com/static/api/js/share.js
window._bd_share_main?window._bd_share_is_recently_loaded=!0:(window._bd_share_is_recently_loaded=!1,window._bd_share_main={version:"2.0",jscfg:{domain:{staticUrl:"https://bdimg.share.baidu.com/"}}}),!window._bd_share_is_recently_loaded&&(window._bd_share_main.F=window._bd_share_main.F||function(e,t){function r(e,t){if(e instanceof Array){for(var n=0,r=e.length;n<r;n++)if(t.call(e[n],e[n],n)===!1)return}else for(var n in e)if(e.hasOwnProperty(n)&&t.call(e[n],e[n],n)===!1)return}function i(e,t){this.svnMod="",this.name=null,this.path=e,this.fn=null,this.exports={},this._loaded=!1,this._requiredStack=[],this._readyStack=[],i.cache[this.path]=this;if(t&&t.charAt(0)!=="."){var n=t.split(":");n.length>1?(this.svnMod=n[0],this.name=n[1]):this.name=t}this.svnMod||(this.svnMod=this.path.split("/js/")[0].substr(1)),this.type="js",this.getKey=function(){return this.svnMod+":"+this.name},this._info={}}function o(e,t){var n=t=="css",r=document.createElement(n?"link":"script");return r}function u(t,n,r,i){function c(){c.isCalled||(c.isCalled=!0,clearTimeout(l),r&&r())}var s=o(t,n);s.nodeName==="SCRIPT"?a(s,c):f(s,c);var l=setTimeout(function(){throw new Error("load "+n+" timeout : "+t)},e._loadScriptTimeout||1e4),h=document.getElementsByTagName("head")[0];n=="css"?(s.rel="stylesheet",s.href=t,h.appendChild(s)):(s.type="text/javascript",s.src=t,h.insertBefore(s,h.firstChild))}function a(e,t){e.onload=e.onerror=e.onreadystatechange=function(){if(/loaded|complete|undefined/.test(e.readyState)){e.onload=e.onerror=e.onreadystatechange=null;if(e.parentNode){e.parentNode.removeChild(e);try{if(e.clearAttributes)e.clearAttributes();else for(var n in e)delete e[n]}catch(r){}}e=undefined,t&&t()}}}function f(e,t){e.attachEvent?e.attachEvent("onload",t):setTimeout(function(){l(e,t)},0)}function l(e,t){if(t&&t.isCalled)return;var n,r=navigator.userAgent,i=~r.indexOf("AppleWebKit"),s=~r.indexOf("Opera");if(i||s)e.sheet&&(n=!0);else if(e.sheet)try{e.sheet.cssRules&&(n=!0)}catch(o){if(o.name==="SecurityError"||o.name==="NS_ERROR_DOM_SECURITY_ERR")n=!0}setTimeout(function(){n?t&&t():l(e,t)},1)}var n="api";e.each=r,i.currentPath="",i.loadedPaths={},i.loadingPaths={},i.cache={},i.paths={},i.handlers=[],i.moduleFileMap={},i.requiredPaths={},i.lazyLoadPaths={},i.services={},i.isPathsLoaded=function(e){var t=!0;return r(e,function(e){if(!(e in i.loadedPaths))return t=!1}),t},i.require=function(e,t){e.search(":")<0&&(t||(t=n,i.currentPath&&(t=i.currentPath.split("/js/")[0].substr(1))),e=t+":"+e);var r=i.get(e,i.currentPath);if(r.type=="css")return;if(r){if(!r._inited){r._inited=!0;var s,o=r.svnMod;if(s=r.fn.call(null,function(e){return i.require(e,o)},r.exports,new h(r.name,o)))r.exports=s}return r.exports}throw new Error('Module "'+e+'" not found!')},i.baseUrl=t?t[t.length-1]=="/"?t:t+"/":"/",i.getBasePath=function(e){var t,n;return(n=e.indexOf("/"))!==-1&&(t=e.slice(0,n)),t&&t in i.paths?i.paths[t]:i.baseUrl},i.getJsPath=function(t,r){if(t.charAt(0)==="."){r=r.replace(/\/[^\/]+\/[^\/]+$/,""),t.search("./")===0&&(t=t.substr(2));var s=0;t=t.replace(/^(\.\.\/)+/g,function(e){return s=e.length/3,""});while(s>0)r=r.substr(0,r.lastIndexOf("/")),s--;return r+"/"+t+"/"+t.substr(t.lastIndexOf("/")+1)+".js"}var o,u,a,f,l,c;if(t.search(":")>=0){var h=t.split(":");o=h[0],t=h[1]}else r&&(o=r.split("/")[1]);o=o||n;var p=/\.css(?:\?|$)/i.test(t);p&&e._useConfig&&i.moduleFileMap[o][t]&&(t=i.moduleFileMap[o][t]);var t=l=t,d=i.getBasePath(t);return(a=t.indexOf("/"))!==-1&&(u=t.slice(0,a),f=t.lastIndexOf("/"),l=t.slice(f+1)),u&&u in i.paths&&(t=t.slice(a+1)),c=d+o+"/js/"+t+".js",c},i.get=function(e,t){var n=i.getJsPath(e,t);return i.cache[n]?i.cache[n]:new i(n,e)},i.prototype={load:function(){i.loadingPaths[this.path]=!0;var t=this.svnMod||n,r=window._bd_share_main.jscfg.domain.staticUrl+"static/"+t+"/",o=this,u=/\.css(?:\?|$)/i.test(this.name);this.type=u?"css":"js";var a="/"+this.type+"/"+i.moduleFileMap[t][this.name];e._useConfig&&i.moduleFileMap[t][this.name]?r+=this.type+"/"+i.moduleFileMap[t][this.name]:r+=this.type+"/"+this.name+(u?"":".js");if(e._firstScreenCSS.indexOf(this.name)>0||e._useConfig&&a==e._firstScreenJS)o._loaded=!0,o.ready();else{var f=(new Date).getTime();s.create({src:r,type:this.type,loaded:function(){o._info.loadedTime=(new Date).getTime()-f,o.type=="css"&&(o._loaded=!0,o.ready())}})}},lazyLoad:function(){var e=this.name;if(i.lazyLoadPaths[this.getKey()])this.define(),delete i.lazyLoadPaths[this.getKey()];else{if(this.exist())return;i.requiredPaths[this.getKey()]=!0,this.load()}},ready:function(e,t){var n=t?this._requiredStack:this._readyStack;if(e)this._loaded?e():n.push(e);else{i.loadedPaths[this.path]=!0,delete i.loadingPaths[this.path],this._loaded=!0,i.currentPath=this.path;if(this._readyStack&&this._readyStack.length>0){this._inited=!0;var s,o=this.svnMod;this.fn&&(s=this.fn.call(null,function(e){return i.require(e,o)},this.exports,new h(this.name,o)))&&(this.exports=s),r(this._readyStack,function(e){e()}),delete this._readyStack}this._requiredStack&&this._requiredStack.length>0&&(r(this._requiredStack,function(e){e()}),delete this._requiredStack)}},define:function(){var e=this,t=this.deps,n=this.path,s=[];t||(t=this.getDependents()),t.length?(r(t,function(t){s.push(i.getJsPath(t,e.path))}),r(t,function(t){var n=i.get(t,e.path);n.ready(function(){i.isPathsLoaded(s)&&e.ready()},!0),n.lazyLoad()})):this.ready()},exist:function(){var e=this.path;return e in i.loadedPaths||e in i.loadingPaths},getDependents:function(){var e=this,t=this.fn.toString(),n=t.match(/function\s*\(([^,]*),/i),i=new RegExp("[^.]\\b"+n[1]+"\\(\\s*('|\")([^()\"']*)('|\")\\s*\\)","g"),s=t.match(i),o=[];return s&&r(s,function(e,t){o[t]=e.substr(n[1].length+3).slice(0,-2)}),o}};var s={create:function(e){var t=e.src;if(t in this._paths)return;this._paths[t]=!0,r(this._rules,function(e){t=e.call(null,t)}),u(t,e.type,e.loaded)},_paths:{},_rules:[],addPathRule:function(e){this._rules.push(e)}};e.version="1.0",e.use=function(e,t){typeof e=="string"&&(e=[e]);var n=[],s=[];r(e,function(e,t){s[t]=!1}),r(e,function(e,o){var u=i.get(e),a=u._loaded;u.ready(function(){var e=u.exports||{};e._INFO=u._info,e._INFO&&(e._INFO.isNew=!a),n[o]=e,s[o]=!0;var i=!0;r(s,function(e){if(e===!1)return i=!1}),t&&i&&t.apply(null,n)}),u.lazyLoad()})},e.module=function(e,t,n){var r=i.get(e);r.fn=t,r.deps=n,i.requiredPaths[r.getKey()]?r.define():i.lazyLoadPaths[r.getKey()]=!0},e.pathRule=function(e){s.addPathRule(e)},e._addPath=function(e,t){t.slice(-1)!=="/"&&(t+="/");if(e in i.paths)throw new Error(e+" has already in Module.paths");i.paths[e]=t};var c=n;e._setMod=function(e){c=e||n},e._fileMap=function(t,n){if(typeof t=="object")r(t,function(t,n){e._fileMap(n,t)});else{var s=c;typeof n=="string"&&(n=[n]),t=t.indexOf("js/")==1?t.substr(4):t,t=t.indexOf("css/")==1?t.substr(5):t;var o=i.moduleFileMap[s];o||(o={}),r(n,function(e){o[e]||(o[e]=t)}),i.moduleFileMap[s]=o}},e._eventMap={},e.call=function(t,n,r){var i=[];for(var s=2,o=arguments.length;s<o;s++)i.push(arguments[s]);e.use(t,function(e){var t=n.split(".");for(var r=0,s=t.length;r<s;r++)e=e[t[r]];e&&e.apply(this,i)})},e._setContext=function(e){typeof e=="object"&&r(e,function(e,t){h.prototype[t]=i.require(e)})},e._setContextMethod=function(e,t){h.prototype[e]=t};var h=function(e,t){this.modName=e,this.svnMod=t};return h.prototype={domain:window._bd_share_main.jscfg.domain,use:function(t,n){typeof t=="string"&&(t=[t]);for(var r=t.length-1;r>=0;r--)t[r]=this.svnMod+":"+t[r];e.use(t,n)}},e._Context=h,e.addLog=function(t,n){e.use("lib/log",function(e){e.defaultLog(t,n)})},e.fire=function(t,n,r){e.use("lib/mod_evt",function(e){e.fire(t,n,r)})},e._defService=function(e,t){if(e){var n=i.services[e];n=n||{},r(t,function(e,t){n[t]=e}),i.services[e]=n}},e.getService=function(t,n,r){var s=i.services[t];if(!s)throw new Error(t+" mod didn't define any services");var o=s[n];if(!o)throw new Error(t+" mod didn't provide service "+n);e.use(t+":"+o,r)},e}({})),!window._bd_share_is_recently_loaded&&window._bd_share_main.F.module("base/min_tangram",function(e,t){var n={};n.each=function(e,t,n){var r,i,s,o=e.length;if("function"==typeof t)for(s=0;s<o;s++){i=e[s],r=t.call(n||e,s,i);if(r===!1)break}return e};var r=function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e};n.extend=function(){var e=arguments[0];for(var t=1,n=arguments.length;t<n;t++)r(e,arguments[t]);return e},n.domready=function(e,t){t=t||document;if(/complete/.test(t.readyState))e();else if(t.addEventListener)"interactive"==t.readyState?e():t.addEventListener("DOMContentLoaded",e,!1);else{var n=function(){n=new Function,e()};void function(){try{t.body.doScroll("left")}catch(e){return setTimeout(arguments.callee,10)}n()}(),t.attachEvent("onreadystatechange",function(){"complete"==t.readyState&&n()})}},n.isArray=function(e){return"[object Array]"==Object.prototype.toString.call(e)},t.T=n}),!window._bd_share_is_recently_loaded&&window._bd_share_main.F.module("base/class",function(e,t,n){var r=e("base/min_tangram").T;t.BaseClass=function(){var e=this,t={};e.on=function(e,n){var r=t[e];r||(r=t[e]=[]),r.push(n)},e.un=function(e,n){if(!e){t={};return}var i=t[e];i&&(n?r.each(i,function(e,t){if(t==n)return i.splice(e,1),!1}):t[e]=[])},e.fire=function(n,i){var s=t[n];s&&(i=i||{},r.each(s,function(t,n){i._result=n.call(e,r.extend({_ctx:{src:e}},i))}))}};var i={};i.create=function(e,n){return n=n||t.BaseClass,function(){n.apply(this,arguments);var i=r.extend({},this);e.apply(this,arguments),this._super=i}},t.Class=i}),!window._bd_share_is_recently_loaded&&window._bd_share_main.F.module("conf/const",function(e,t,n){t.CMD_ATTR="data-cmd",t.CONFIG_TAG_ATTR="data-tag",t.URLS={likeSetUrl:"https://like.baidu.com/set",commitUrl:"https://s.share.baidu.com/commit",jumpUrl:"https://s.share.baidu.com",mshareUrl:"https://s.share.baidu.com/mshare",emailUrl:"https://s.share.baidu.com/sendmail",nsClick:"https://nsclick.baidu.com/v.gif",backUrl:"https://s.share.baidu.com/back",shortUrl:"https://dwz.cn/v2cut.php"}}),!window._bd_share_is_recently_loaded&&function(){window._bd_share_main.F._setMod("api"),window._bd_share_main.F._fileMap({"/js/share.js?v=da893e3e.js":["conf/define","base/fis","base/tangrammin","base/class.js","conf/define.js","conf/const.js","config","share/api_base.js","view/view_base.js","start/router.js","component/comm_tools.js","trans/trans.js"],"/js/base/tangram.js?v=37768233.js":["base/tangram"],"/js/view/share_view.js?v=3ae6026d.js":["view/share_view"],"/js/view/slide_view.js?v=9fecb657.js":["view/slide_view"],"/js/view/like_view.js?v=df3e0eca.js":["view/like_view"],"/js/view/select_view.js?v=14bb0f0f.js":["view/select_view"],"/js/trans/data.js?v=17af2bd2.js":["trans/data"],"/js/trans/logger.js?v=60603cb3.js":["trans/logger"],"/js/trans/trans_bdxc.js?v=7ac21555.js":["trans/trans_bdxc"],"/js/trans/trans_bdysc.js?v=fc21acaa.js":["trans/trans_bdysc"],"/js/trans/trans_weixin.js?v=6e098bbd.js":["trans/trans_weixin"],"/js/share/combine_api.js?v=8d37a7b3.js":["share/combine_api"],"/js/share/like_api.js?v=d3693f0a.js":["share/like_api"],"/js/share/likeshare.js?v=e1f4fbf1.js":["share/likeshare"],"/js/share/share_api.js?v=226108fe.js":["share/share_api"],"/js/share/slide_api.js?v=ec14f516.js":["share/slide_api"],"/js/component/animate.js?v=5b737477.js":["component/animate"],"/js/component/anticheat.js?v=44b9b245.js":["component/anticheat"],"/js/component/partners.js?v=96dbe85a.js":["component/partners"],"/js/component/pop_base.js?v=36f92e70.js":["component/pop_base"],"/js/component/pop_dialog.js?v=d479767d.js":["component/pop_dialog"],"/js/component/pop_popup.js?v=4387b4e1.js":["component/pop_popup"],"/js/component/pop_popup_slide.js?v=b16a1f10.js":["component/pop_popup_slide"],"/js/component/qrcode.js?v=d69754a9.js":["component/qrcode"],"/css/share_style0_16.css?v=8105b07e.css":["share_style0_16.css"],"/css/share_style0_32.css?v=5090ac8b.css":["share_style0_32.css"],"/css/share_style2.css?v=adaec91f.css":["share_style2.css"],"/css/share_style4.css?v=3516ee8a.css":["share_style4.css"],"/css/slide_share.css?v=855af98e.css":["slide_share.css"],"/css/share_popup.css?v=ecc6050c.css":["share_popup.css"],"/css/like.css?v=2797cee5.css":["like.css"],"/css/imgshare.css?v=754091cd.css":["imgshare.css"],"/css/select_share.css?v=cab3cb22.css":["select_share.css"],"/css/weixin_popup.css?v=43591908.css":["weixin_popup.css"]}),window._bd_share_main.F._loadScriptTimeout=15e3,window._bd_share_main.F._useConfig=!0,window._bd_share_main.F._firstScreenCSS="",window._bd_share_main.F._firstScreenJS=""}(),!window._bd_share_is_recently_loaded&&window._bd_share_main.F.use("base/min_tangram",function(e){function n(e,t,n){var r=new e(n);r.setView(new t(n)),r.init(),n&&n._handleId&&(_bd_share_main.api=_bd_share_main.api||{},_bd_share_main.api[n._handleId]=r)}function r(e,r){window._bd_share_main.F.use(e,function(e,i){t.isArray(r)?t.each(r,function(t,r){n(e.Api,i.View,r)}):n(e.Api,i.View,r)})}function i(e){var n=e.common||window._bd_share_config&&_bd_share_config.common||{},r={like:{type:"like"},share:{type:"share",bdStyle:0,bdMini:2,bdSign:"on"},slide:{type:"slide",bdStyle:"1",bdMini:2,bdImg:0,bdPos:"right",bdTop:100,bdSign:"on"},image:{viewType:"list",viewStyle:"0",viewPos:"top",viewColor:"black",viewSize:"16",viewList:["qzone","tsina","huaban","tqq","renren"]},selectShare:{type:"select",bdStyle:0,bdMini:2,bdSign:"on"}},i={share:{__cmd:"",__buttonType:"",__type:"",__element:null},slide:{__cmd:"",__buttonType:"",__type:"",__element:null},image:{__cmd:"",__buttonType:"",__type:"",__element:null}};return t.each(["like","share","slide","image","selectShare"],function(s,o){e[o]&&(t.isArray(e[o])&&e[o].length>0?t.each(e[o],function(s,u){e[o][s]=t.extend({},r[o],n,u,i[o])}):e[o]=t.extend({},r[o],n,e[o],i[o]))}),e}var t=e.T;_bd_share_main.init=function(e){e=e||window._bd_share_config||{share:{}};if(e){var t=i(e);t.like&&r(["share/like_api","view/like_view"],t.like),t.share&&r(["share/share_api","view/share_view"],t.share),t.slide&&r(["share/slide_api","view/slide_view"],t.slide),t.selectShare&&r(["share/select_api","view/select_view"],t.selectShare),t.image&&r(["share/image_api","view/image_view"],t.image)}},window._bd_share_main._LogPoolV2=[],window._bd_share_main.n1=(new Date).getTime(),t.domready(function(){window._bd_share_main.n2=(new Date).getTime()+1e3,_bd_share_main.init(),setTimeout(function(){window._bd_share_main.F.use("trans/logger",function(e){e.nsClick(),e.back(),e.duration()})},3e3)})}),!window._bd_share_is_recently_loaded&&window._bd_share_main.F.module("component/comm_tools",function(e,t){var n=function(){var e=window.location||document.location||{};return e.href||""},r=function(e,t){var n=e.length,r="";for(var i=1;i<=t;i++){var s=Math.floor(n*Math.random());r+=e.charAt(s)}return r},i=function(){var e=(+(new Date)).toString(36),t=r("0123456789abcdefghijklmnopqrstuvwxyz",3);return e+t};t.getLinkId=i,t.getPageUrl=n}),!window._bd_share_is_recently_loaded&&window._bd_share_main.F.module("trans/trans",function(e,t){var n=e("component/comm_tools"),r=e("conf/const").URLS,i=function(){window._bd_share_main.F.use("base/tangram",function(e){var t=e.T;t.cookie.get("bdshare_firstime")==null&&t.cookie.set("bdshare_firstime",new Date*1,{path:"/",expires:(new Date).setFullYear(2022)-new Date})})},s=function(e){var t=e.bdUrl||n.getPageUrl();return t=t.replace(/\'/g,"%27").replace(/\"/g,"%22"),t},o=function(e){var t=(new Date).getTime()+3e3,r={click:1,url:s(e),uid:e.bdUid||"0",to:e.__cmd,type:"text",pic:e.bdPic||"",title:(e.bdText||document.title).substr(0,300),key:(e.bdSnsKey||{})[e.__cmd]||"",desc:e.bdDesc||"",comment:e.bdComment||"",relateUid:e.bdWbuid||"",searchPic:e.bdSearchPic||0,sign:e.bdSign||"on",l:window._bd_share_main.n1.toString(32)+window._bd_share_main.n2.toString(32)+t.toString(32),linkid:n.getLinkId(),firstime:a("bdshare_firstime")||""};switch(e.__cmd){case"copy":l(r);break;case"print":c();break;case"bdxc":h();break;case"bdysc":p(r);break;case"weixin":d(r);break;default:u(e,r)}window._bd_share_main.F.use("trans/logger",function(t){t.commit(e,r)})},u=function(e,t){var n=r.jumpUrl;e.__cmd=="mshare"?n=r.mshareUrl:e.__cmd=="mail"&&(n=r.emailUrl);var i=n+"?"+f(t);window.open(i)},a=function(e){if(e){var t=new RegExp("(^| )"+e+"=([^;]*)(;|$)"),n=t.exec(document.cookie);if(n)return decodeURIComponent(n[2]||null)}},f=function(e){var t=[];for(var n in e)t.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t.join("&").replace(/%20/g,"+")},l=function(e){window._bd_share_main.F.use("base/tangram",function(t){var r=t.T;r.browser.ie?(window.clipboardData.setData("text",document.title+" "+(e.bdUrl||n.getPageUrl())),alert("\u6807\u9898\u548c\u94fe\u63a5\u590d\u5236\u6210\u529f\uff0c\u60a8\u53ef\u4ee5\u63a8\u8350\u7ed9QQ/MSN\u4e0a\u7684\u597d\u53cb\u4e86\uff01")):window.prompt("\u60a8\u4f7f\u7528\u7684\u662f\u975eIE\u6838\u5fc3\u6d4f\u89c8\u5668\uff0c\u8bf7\u6309\u4e0b Ctrl+C \u590d\u5236\u4ee3\u7801\u5230\u526a\u8d34\u677f",document.title+" "+(e.bdUrl||n.getPageUrl()))})},c=function(){window.print()},h=function(){window._bd_share_main.F.use("trans/trans_bdxc",function(e){e&&e.run()})},p=function(e){window._bd_share_main.F.use("trans/trans_bdysc",function(t){t&&t.run(e)})},d=function(e){window._bd_share_main.F.use("trans/trans_weixin",function(t){t&&t.run(e)})},v=function(e){o(e)};t.run=v,i()});


================================================
FILE: asset/style.css
================================================
    /*隐藏头部的目录*/
    #main>ul:nth-child(1) {
        display: none;
    }

    #main>ul:nth-child(2) {
        display: none;
    }

    .markdown-section h1 {
        margin: 3rem 0 2rem 0;
    }

    .markdown-section h2 {
        margin: 2rem 0 1rem;
    }

    img,
    pre {
        border-radius: 8px;
    }

    .content,
    .sidebar,
    .markdown-section,
    body,
    .search input {
        background-color: rgba(243, 242, 238, 1) !important;
    }

    @media (min-width:600px) {
        .sidebar-toggle {
            background-color: #f3f2ee;
        }
    }

    .docsify-copy-code-button {
        background: #f8f8f8 !important;
        color: #7a7a7a !important;
    }

    body {
        /*font-family: Microsoft YaHei, Source Sans Pro, Helvetica Neue, Arial, sans-serif !important;*/
    }

    .markdown-section>p {
        font-size: 16px !important;
    }

    .markdown-section pre>code {
        font-family: Consolas, Roboto Mono, Monaco, courier, monospace !important;
        font-size: .9rem !important;

    }

    /*.anchor span {
    color: rgb(66, 185, 131);
}*/

    section.cover h1 {
        margin: 0;
    }

    body>section>div.cover-main>ul>li>a {
        color: #42b983;
    }

    .markdown-section img {
        box-shadow: 7px 9px 10px #aaa !important;
    }


    pre {
        background-color: #f3f2ee !important;
    }

    @media (min-width:600px) {
        pre code {
            /*box-shadow: 2px 1px 20px 2px #aaa;*/
            /*border-radius: 10px !important;*/
            padding-left: 20px !important;
        }
    }

    @media (max-width:600px) {
        pre {
            padding-left: 0px !important;
            padding-right: 0px !important;
        }
    }

    .markdown-section pre {
        padding-left: 0 !important;
        padding-right: 0px !important;
        box-shadow: 2px 1px 20px 2px #aaa;
    }

================================================
FILE: asset/vue.css
================================================
@import url("https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600");
* {
  -webkit-font-smoothing: antialiased;
  -webkit-overflow-scrolling: touch;
  -webkit-tap-highlight-color: rgba(0,0,0,0);
  -webkit-text-size-adjust: none;
  -webkit-touch-callout: none;
  box-sizing: border-box;
}
body:not(.ready) {
  overflow: hidden;
}
body:not(.ready) [data-cloak],
body:not(.ready) .app-nav,
body:not(.ready) > nav {
  display: none;
}
div#app {
  font-size: 30px;
  font-weight: lighter;
  margin: 40vh auto;
  text-align: center;
}
div#app:empty::before {
  content: 'Loading...';
}
.emoji {
  height: 1.2rem;
  vertical-align: middle;
}
.progress {
  background-color: var(--theme-color, #42b983);
  height: 2px;
  left: 0px;
  position: fixed;
  right: 0px;
  top: 0px;
  transition: width 0.2s, opacity 0.4s;
  width: 0%;
  z-index: 999999;
}
.search a:hover {
  color: var(--theme-color, #42b983);
}
.search .search-keyword {
  color: var(--theme-color, #42b983);
  font-style: normal;
  font-weight: bold;
}
html,
body {
  height: 100%;
}
body {
  -moz-osx-font-smoothing: grayscale;
  -webkit-font-smoothing: antialiased;
  color: #34495e;
  font-family: 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
  font-size: 15px;
  letter-spacing: 0;
  margin: 0;
  overflow-x: hidden;
}
img {
  max-width: 100%;
}
a[disabled] {
  cursor: not-allowed;
  opacity: 0.6;
}
kbd {
  border: solid 1px #ccc;
  border-radius: 3px;
  display: inline-block;
  font-size: 12px !important;
  line-height: 12px;
  margin-bottom: 3px;
  padding: 3px 5px;
  vertical-align: middle;
}
li input[type='checkbox'] {
  margin: 0 0.2em 0.25em 0;
  vertical-align: middle;
}
.app-nav {
  margin: 25px 60px 0 0;
  position: absolute;
  right: 0;
  text-align: right;
  z-index: 10;
/* navbar dropdown */
}
.app-nav.no-badge {
  margin-right: 25px;
}
.app-nav p {
  margin: 0;
}
.app-nav > a {
  margin: 0 1rem;
  padding: 5px 0;
}
.app-nav ul,
.app-nav li {
  display: inline-block;
  list-style: none;
  margin: 0;
}
.app-nav a {
  color: inherit;
  font-size: 16px;
  text-decoration: none;
  transition: color 0.3s;
}
.app-nav a:hover {
  color: var(--theme-color, #42b983);
}
.app-nav a.active {
  border-bottom: 2px solid var(--theme-color, #42b983);
  color: var(--theme-color, #42b983);
}
.app-nav li {
  display: inline-block;
  margin: 0 1rem;
  padding: 5px 0;
  position: relative;
  cursor: pointer;
}
.app-nav li ul {
  background-color: #fff;
  border: 1px solid #ddd;
  border-bottom-color: #ccc;
  border-radius: 4px;
  box-sizing: border-box;
  display: none;
  max-height: calc(100vh - 61px);
  overflow-y: auto;
  padding: 10px 0;
  position: absolute;
  right: -15px;
  text-align: left;
  top: 100%;
  white-space: nowrap;
}
.app-nav li ul li {
  display: block;
  font-size: 14px;
  line-height: 1rem;
  margin: 0;
  margin: 8px 14px;
  white-space: nowrap;
}
.app-nav li ul a {
  display: block;
  font-size: inherit;
  margin: 0;
  padding: 0;
}
.app-nav li ul a.active {
  border-bottom: 0;
}
.app-nav li:hover ul {
  display: block;
}
.github-corner {
  border-bottom: 0;
  position: fixed;
  right: 0;
  text-decoration: none;
  top: 0;
  z-index: 1;
}
.github-corner:hover .octo-arm {
  -webkit-animation: octocat-wave 560ms ease-in-out;
          animation: octocat-wave 560ms ease-in-out;
}
.github-corner svg {
  color: #fff;
  fill: var(--theme-color, #42b983);
  height: 80px;
  width: 80px;
}
main {
  display: block;
  position: relative;
  width: 100vw;
  height: 100%;
  z-index: 0;
}
main.hidden {
  display: none;
}
.anchor {
  display: inline-block;
  text-decoration: none;
  transition: all 0.3s;
}
.anchor span {
  color: #34495e;
}
.anchor:hover {
  text-decoration: underline;
}
.sidebar {
  border-right: 1px solid rgba(0,0,0,0.07);
  overflow-y: auto;
  padding: 40px 0 0;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  transition: transform 250ms ease-out;
  width: 300px;
  z-index: 20;
}
.sidebar > h1 {
  margin: 0 auto 1rem;
  font-size: 1.5rem;
  font-weight: 300;
  text-align: center;
}
.sidebar > h1 a {
  color: inherit;
  text-decoration: none;
}
.sidebar > h1 .app-nav {
  display: block;
  position: static;
}
.sidebar .sidebar-nav {
  line-height: 2em;
  padding-bottom: 40px;
}
.sidebar li.collapse .app-sub-sidebar {
  display: none;
}
.sidebar ul {
  margin: 0 0 0 15px;
  padding: 0;
}
.sidebar li > p {
  font-weight: 700;
  margin: 0;
}
.sidebar ul,
.sidebar ul li {
  list-style: none;
}
.sidebar ul li a {
  border-bottom: none;
  display: block;
}
.sidebar ul li ul {
  padding-left: 20px;
}
.sidebar::-webkit-scrollbar {
  width: 4px;
}
.sidebar::-webkit-scrollbar-thumb {
  background: transparent;
  border-radius: 4px;
}
.sidebar:hover::-webkit-scrollbar-thumb {
  background: rgba(136,136,136,0.4);
}
.sidebar:hover::-webkit-scrollbar-track {
  background: rgba(136,136,136,0.1);
}
.sidebar-toggle {
  background-color: transparent;
  background-color: rgba(255,255,255,0.8);
  border: 0;
  outline: none;
  padding: 10px;
  position: absolute;
  bottom: 0;
  left: 0;
  text-align: center;
  transition: opacity 0.3s;
  width: 284px;
  z-index: 30;
  cursor: pointer;
}
.sidebar-toggle:hover .sidebar-toggle-button {
  opacity: 0.4;
}
.sidebar-toggle span {
  background-color: var(--theme-color, #42b983);
  display: block;
  margin-bottom: 4px;
  width: 16px;
  height: 2px;
}
body.sticky .sidebar,
body.sticky .sidebar-toggle {
  position: fixed;
}
.content {
  padding-top: 60px;
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 300px;
  transition: left 250ms ease;
}
.markdown-section {
  margin: 0 auto;
  max-width: 80%;
  padding: 30px 15px 40px 15px;
  position: relative;
}
.markdown-section > * {
  box-sizing: border-box;
  font-size: inherit;
}
.markdown-section > :first-child {
  margin-top: 0 !important;
}
.markdown-section hr {
  border: none;
  border-bottom: 1px solid #eee;
  margin: 2em 0;
}
.markdown-section iframe {
  border: 1px solid #eee;
/* fix horizontal overflow on iOS Safari */
  width: 1px;
  min-width: 100%;
}
.markdown-section table {
  border-collapse: collapse;
  border-spacing: 0;
  display: block;
  margin-bottom: 1rem;
  overflow: auto;
  width: 100%;
}
.markdown-section th {
  border: 1px solid #ddd;
  font-weight: bold;
  padding: 6px 13px;
}
.markdown-section td {
  border: 1px solid #ddd;
  padding: 6px 13px;
}
.markdown-section tr {
  border-top: 1px solid #ccc;
}
.markdown-section tr:nth-child(2n) {
  background-color: #f8f8f8;
}
.markdown-section p.tip {
  background-color: #f8f8f8;
  border-bottom-right-radius: 2px;
  border-left: 4px solid #f66;
  border-top-right-radius: 2px;
  margin: 2em 0;
  padding: 12px 24px 12px 30px;
  position: relative;
}
.markdown-section p.tip:before {
  background-color: #f66;
  border-radius: 100%;
  color: #fff;
  content: '!';
  font-family: 'Dosis', 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
  font-size: 14px;
  font-weight: bold;
  left: -12px;
  line-height: 20px;
  position: absolute;
  height: 20px;
  width: 20px;
  text-align: center;
  top: 14px;
}
.markdown-section p.tip code {
  background-color: #efefef;
}
.markdown-section p.tip em {
  color: #34495e;
}
.markdown-section p.warn {
  background: rgba(66,185,131,0.1);
  border-radius: 2px;
  padding: 1rem;
}
.markdown-section ul.task-list > li {
  list-style-type: none;
}
body.close .sidebar {
  transform: translateX(-300px);
}
body.close .sidebar-toggle {
  width: auto;
}
body.close .content {
  left: 0;
}
@media print {
  .github-corner,
  .sidebar-toggle,
  .sidebar,
  .app-nav {
    display: none;
  }
}
@media screen and (max-width: 768px) {
  .github-corner,
  .sidebar-toggle,
  .sidebar {
    position: fixed;
  }
  .app-nav {
    margin-top: 16px;
  }
  .app-nav li ul {
    top: 30px;
  }
  main {
    height: auto;
    overflow-x: hidden;
  }
  .sidebar {
    left: -300px;
    transition: transform 250ms ease-out;
  }
  .content {
    left: 0;
    max-width: 100vw;
    position: static;
    padding-top: 20px;
    transition: transform 250ms ease;
  }
  .app-nav,
  .github-corner {
    transition: transform 250ms ease-out;
  }
  .sidebar-toggle {
    background-color: transparent;
    width: auto;
    padding: 30px 30px 10px 10px;
  }
  body.close .sidebar {
    transform: translateX(300px);
  }
  body.close .sidebar-toggle {
    background-color: rgba(255,255,255,0.8);
    transition: 1s background-color;
    width: 284px;
    padding: 10px;
  }
  body.close .content {
    transform: translateX(300px);
  }
  body.close .app-nav,
  body.close .github-corner {
    display: none;
  }
  .github-corner:hover .octo-arm {
    -webkit-animation: none;
            animation: none;
  }
  .github-corner .octo-arm {
    -webkit-animation: octocat-wave 560ms ease-in-out;
            animation: octocat-wave 560ms ease-in-out;
  }
}
@-webkit-keyframes octocat-wave {
  0%, 100% {
    transform: rotate(0);
  }
  20%, 60% {
    transform: rotate(-25deg);
  }
  40%, 80% {
    transform: rotate(10deg);
  }
}
@keyframes octocat-wave {
  0%, 100% {
    transform: rotate(0);
  }
  20%, 60% {
    transform: rotate(-25deg);
  }
  40%, 80% {
    transform: rotate(10deg);
  }
}
section.cover {
  align-items: center;
  background-position: center center;
  background-repeat: no-repeat;
  background-size: cover;
  height: 100vh;
  width: 100vw;
  display: none;
}
section.cover.show {
  display: flex;
}
section.cover.has-mask .mask {
  background-color: #fff;
  opacity: 0.8;
  position: absolute;
  top: 0;
  height: 100%;
  width: 100%;
}
section.cover .cover-main {
  flex: 1;
  margin: -20px 16px 0;
  text-align: center;
  position: relative;
}
section.cover a {
  color: inherit;
  text-decoration: none;
}
section.cover a:hover {
  text-decoration: none;
}
section.cover p {
  line-height: 1.5rem;
  margin: 1em 0;
}
section.cover h1 {
  color: inherit;
  font-size: 2.5rem;
  font-weight: 300;
  margin: 0.625rem 0 2.5rem;
  position: relative;
  text-align: center;
}
section.cover h1 a {
  display: block;
}
section.cover h1 small {
  bottom: -0.4375rem;
  font-size: 1rem;
  position: absolute;
}
section.cover blockquote {
  font-size: 1.5rem;
  text-align: center;
}
section.cover ul {
  line-height: 1.8;
  list-style-type: none;
  margin: 1em auto;
  max-width: 500px;
  padding: 0;
}
section.cover .cover-main > p:last-child a {
  border-color: var(--theme-color, #42b983);
  border-radius: 2rem;
  border-style: solid;
  border-width: 1px;
  box-sizing: border-box;
  color: var(--theme-color, #42b983);
  display: inline-block;
  font-size: 1.05rem;
  letter-spacing: 0.1rem;
  margin: 0.5rem 1rem;
  padding: 0.75em 2rem;
  text-decoration: none;
  transition: all 0.15s ease;
}
section.cover .cover-main > p:last-child a:last-child {
  background-color: var(--theme-color, #42b983);
  color: #fff;
}
section.cover .cover-main > p:last-child a:last-child:hover {
  color: inherit;
  opacity: 0.8;
}
section.cover .cover-main > p:last-child a:hover {
  color: inherit;
}
section.cover blockquote > p > a {
  border-bottom: 2px solid var(--theme-color, #42b983);
  transition: color 0.3s;
}
section.cover blockquote > p > a:hover {
  color: var(--theme-color, #42b983);
}
body {
  background-color: #fff;
}
/* sidebar */
.sidebar {
  background-color: #fff;
  color: #364149;
}
.sidebar li {
  margin: 6px 0 6px 0;
}
.sidebar ul li a {
  color: #505d6b;
  font-size: 14px;
  font-weight: normal;
  overflow: hidden;
  text-decoration: none;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.sidebar ul li a:hover {
  text-decoration: underline;
}
.sidebar ul li ul {
  padding: 0;
}
.sidebar ul li.active > a {
  border-right: 2px solid;
  color: var(--theme-color, #42b983);
  font-weight: 600;
}
.app-sub-sidebar li::before {
  content: '-';
  padding-right: 4px;
  float: left;
}
/* markdown content found on pages */
.markdown-section h1,
.markdown-section h2,
.markdown-section h3,
.markdown-section h4,
.markdown-section strong {
  color: #2c3e50;
  font-weight: 600;
}
.markdown-section a {
  color: var(--theme-color, #42b983);
  font-weight: 600;
}
.markdown-section h1 {
  font-size: 2rem;
  margin: 0 0 1rem;
}
.markdown-section h2 {
  font-size: 1.75rem;
  margin: 45px 0 0.8rem;
}
.markdown-section h3 {
  font-size: 1.5rem;
  margin: 40px 0 0.6rem;
}
.markdown-section h4 {
  font-size: 1.25rem;
}
.markdown-section h5 {
  font-size: 1rem;
}
.markdown-section h6 {
  color: #777;
  font-size: 1rem;
}
.markdown-section figure,
.markdown-section p {
  margin: 1.2em 0;
}
.markdown-section p,
.markdown-section ul,
.markdown-section ol {
  line-height: 1.6rem;
  word-spacing: 0.05rem;
}
.markdown-section ul,
.markdown-section ol {
  padding-left: 1.5rem;
}
.markdown-section blockquote {
  border-left: 4px solid var(--theme-color, #42b983);
  color: #858585;
  margin: 2em 0;
  padding-left: 20px;
}
.markdown-section blockquote p {
  font-weight: 600;
  margin-left: 0;
}
.markdown-section iframe {
  margin: 1em 0;
}
.markdown-section em {
  color: #7f8c8d;
}
.markdown-section code {
  background-color: #f8f8f8;
  border-radius: 2px;
  color: #e96900;
  font-family: 'Roboto Mono', Monaco, courier, monospace;
  font-size: 0.8rem;
  margin: 0 2px;
  padding: 3px 5px;
  white-space: pre-wrap;
}
.markdown-section pre {
  -moz-osx-font-smoothing: initial;
  -webkit-font-smoothing: initial;
  background-color: #f8f8f8;
  font-family: 'Roboto Mono', Monaco, courier, monospace;
  line-height: 1.5rem;
  margin: 1.2em 0;
  overflow: auto;
  padding: 0 1.4rem;
  position: relative;
  word-wrap: normal;
}
/* code highlight */
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
  color: #8e908c;
}
.token.namespace {
  opacity: 0.7;
}
.token.boolean,
.token.number {
  color: #c76b29;
}
.token.punctuation {
  color: #525252;
}
.token.property {
  color: #c08b30;
}
.token.tag {
  color: #2973b7;
}
.token.string {
  color: var(--theme-color, #42b983);
}
.token.selector {
  color: #6679cc;
}
.token.attr-name {
  color: #2973b7;
}
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
  color: #22a2c9;
}
.token.attr-value,
.token.control,
.token.directive,
.token.unit {
  color: var(--theme-color, #42b983);
}
.token.keyword,
.token.function {
  color: #e96900;
}
.token.statement,
.token.regex,
.token.atrule {
  color: #22a2c9;
}
.token.placeholder,
.token.variable {
  color: #3d8fd1;
}
.token.deleted {
  text-decoration: line-through;
}
.token.inserted {
  border-bottom: 1px dotted #202746;
  text-decoration: none;
}
.token.italic {
  font-style: italic;
}
.token.important,
.token.bold {
  font-weight: bold;
}
.token.important {
  color: #c94922;
}
.token.entity {
  cursor: help;
}
.markdown-section pre > code {
  -moz-osx-font-smoothing: initial;
  -webkit-font-smoothing: initial;
  background-color: #f8f8f8;
  border-radius: 2px;
  color: #525252;
  display: block;
  font-family: 'Roboto Mono', Monaco, courier, monospace;
  font-size: 0.8rem;
  line-height: inherit;
  margin: 0 2px;
  max-width: inherit;
  overflow: inherit;
  padding: 2.2em 5px;
  white-space: inherit;
}
.markdown-section code::after,
.markdown-section code::before {
  letter-spacing: 0.05rem;
}
code .token {
  -moz-osx-font-smoothing: initial;
  -webkit-font-smoothing: initial;
  min-height: 1.5rem;
  position: relative;
  left: auto;
}
pre::after {
  color: #ccc;
  content: attr(data-lang);
  font-size: 0.6rem;
  font-weight: 600;
  height: 15px;
  line-height: 15px;
  padding: 5px 10px 0;
  position: absolute;
  right: 0;
  text-align: right;
  top: 0;
}


================================================
FILE: docs/jianzhioffer/java/03_01_DuplicationInArray.md
================================================
## 找出数组中重复的数字

### 题目描述
在一个长度为 `n` 的数组里的所有数字都在 `0` 到 `n-1` 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为 `7` 的数组 `{2, 3, 1, 0, 2, 5, 3}`,那么对应的输出是重复的数字 `2` 或者 `3`。


### 解法
#### 解法一
排序后,顺序扫描,判断是否有重复,时间复杂度为 `O(n²)`。

#### 解法二
利用哈希表,遍历数组,如果哈希表中没有该元素,则存入哈希表中,否则返回重复的元素。时间复杂度为 `O(n)`,空间复杂度为 `O(n)`。

#### 解法三
长度为 `n`,元素的数值范围也为 `n`,如果没有重复元素,那么数组每个下标对应的值与下标相等。

从头到尾遍历数组,当扫描到下标 `i` 的数字 `nums[i]`:
- 如果等于 `i`,继续向下扫描;
- 如果不等于 `i`,拿它与第 `nums[i]` 个数进行比较,如果相等,说明有重复值,返回 `nums[i]`。如果不相等,就把第 `i` 个数 和第 `nums[i]` 个数交换。重复这个比较交换的过程。

此算法时间复杂度为 `O(n)`,因为每个元素最多只要两次交换,就能确定位置。空间复杂度为 `O(1)`。

```java

/**
 * @author bingo
 * @since 2018/10/27
 */

public class Solution {
    /**
     * 查找数组中的重复元素
     * @param numbers 数组
     * @param length 数组长度
     * @param duplication duplication[0]存储重复元素
     * @return boolean
     */
    public boolean duplicate(int[] numbers, int length, int[] duplication) {
        if (numbers == null || length < 1) {
            return false;
        }
        for (int e : numbers) {
            if (e >= length) {
                return false;
            }
        }

        for (int i = 0; i < length; ++i) {
            while (numbers[i] != i) {
                if (numbers[i] == numbers[numbers[i]]) {
                    duplication[0] = numbers[i];
                    return true;
                }
                swap(numbers, i, numbers[i]);
            }
        }

        return false;
    }

    private void swap(int[] numbers, int i, int j) {
        int t = numbers[i];
        numbers[i] = numbers[j];
        numbers[j] = t;
    }
}
```

### 测试用例
1. 长度为 n 的数组中包含一个或多个重复的数字;
2. 数组中不包含重复的数字;
3. 无效测试输入用例(输入空指针;长度为 n 的数组中包含 0~n-1 之外的数字)。

================================================
FILE: docs/jianzhioffer/java/03_02_DuplicationInArrayNoEdit.md
================================================
## 不修改数组找出重复的数字

### 题目描述
在一个长度为 `n+1` 的数组里的所有数字都在 `1` 到 `n` 的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为 `8` 的数组 `{2, 3, 5, 4, 3, 2, 6, 7}`,那么对应的输出是重复的数字 `2` 或者 `3`。


### 解法
#### 解法一
创建长度为 `n+1` 的辅助数组,把原数组的元素复制到辅助数组中。如果原数组被复制的数是 `m`,则放到辅助数组第 `m` 个位置。这样很容易找出重复元素。空间复杂度为 `O(n)`。

#### 解法二
数组元素的取值范围是 `[1, n]`,对该范围对半划分,分成 `[1, middle]`, `[middle+1, n]`。计算数组中有多少个(count)元素落在 `[1, middle]` 区间内,如果 count 大于 middle-1+1,那么说明这个范围内有重复元素,否则在另一个范围内。继续对这个范围对半划分,继续统计区间内元素数量。

时间复杂度 `O(n * log n)`,空间复杂度 `O(1)`。

注意,此方法无法找出所有重复的元素。

```java
/**
 * @author bingo
 * @since 2018/10/27
 */

public class Solution {
    /**
     * 不修改数组查找重复的元素,没有则返回-1
     * @param numbers 数组
     * @return 重复的元素
     */
    public int getDuplication(int[] numbers) {
        if (numbers == null || numbers.length < 1) {
            return -1;
        }

        int start = 1;
        int end = numbers.length - 1;
        while (end >= start) {
            int middle = start + ((end - start) >> 1);

            // 调用 log n 次
            int count = countRange(numbers, start, middle);
            if (start == end) {
                if (count > 1) {
                    return start;
                }
                break;
            } else {
                // 无法找出所有重复的数
                if (count > (middle - start) + 1) {
                    end = middle;
                } else {
                    start = middle + 1;
                }
            }
        }
        return -1;
    }


    /**
     * 计算整个数组中有多少个数的取值在[start, end] 之间
     * 时间复杂度 O(n)
     * @param numbers 数组
     * @param start 左边界
     * @param end 右边界
     * @return 数量
     */
    private int countRange(int[] numbers, int start, int end) {
        if (numbers == null) {
            return 0;
        }
        int count = 0;
        for(int e : numbers) {
            if (e >= start && e <= end) {
                ++count;
            }
        }
        return count;
    }
}
```

### 测试用例
1. 长度为 n 的数组中包含一个或多个重复的数字;
2. 数组中不包含重复的数字;
3. 无效测试输入用例(输入空指针)。

================================================
FILE: docs/jianzhioffer/java/04_FindInPartiallySortedMatrix.md
================================================
## 二维数组中的查找

### 题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。


### 解法
从二维数组的右上方开始查找:
- 若元素值等于 `target`,返回 `true`;
- 若元素值大于 `target`,砍掉这一列,即 `--j`;
- 若元素值小于 `target`,砍掉这一行,即 `++i`。

也可以从二维数组的左下方开始查找,以下代码使用左下方作为查找的起点。

注意,不能选择左上方或者右下方的数字,因为这样无法缩小查找的范围。

```java
/**
 * @author bingo
 * @since 2018/10/27
 */

public class Solution {
    /**
     * 二维数组中的查找
     * @param target 目标值
     * @param array 二维数组
     * @return boolean
     */
    public boolean find(int target, int[][] array) {
        if (array == null) {
            return false;
        }
        int rows = array.length;
        int columns = array[0].length;
        
        int i = rows - 1;
        int j = 0;
        while (i >= 0 && j < columns) {
            if (array[i][j] == target) {
                return true;
            }
            if (array[i][j] < target) {
                ++j;
            } else {
                --i;
            }
        }
        return false;
    }
}
```

### 测试用例
1. 二维数组中包含查找的数字(查找的数字是数组中的最大值和最小值;查找的数字介于数组中的最大值和最小值之间);
2. 二维数组中没有查找的数字(查找的数字大于/小于数组中的最大值;查找的数字在数组的最大值和最小值之间但数组中没有这个数字);
3. 特殊输入测试(输入空指针)。

================================================
FILE: docs/jianzhioffer/java/05_ReplaceSpaces.md
================================================
## 替换空格

### 题目描述
请实现一个函数,将一个字符串中的每个空格替换成 `%20`。例如,当字符串为 `We Are Happy`,则经过替换之后的字符串为 `We%20Are%20Happy`。


### 解法
#### 解法一
创建 `StringBuilder`,遍历原字符串,遇到非空格,直接 append 到 `StringBuilder` 中,遇到空格则将 `%20` append 到 `StringBuilder` 中。
```java
/**
 * @author bingo
 * @since 2018/10/27
 */

public class Solution {
    /**
     * 将字符串中的所有空格替换为%20
     * @param str 字符串
     * @return 替换后的字符串
     */
    public String replaceSpace(StringBuffer str) {
        if (str == null || str.length() == 0) {
            return str.toString();
        }
        StringBuilder sb = new StringBuilder();
        int len = str.length();
        for (int i = 0; i < len; ++i) {
            char ch = str.charAt(i);
            sb.append(ch == ' ' ? "%20" : ch);
        }

        return sb.toString();
    }
}
```

#### 解法二【推荐】
先遍历原字符串,遇到空格,则在原字符串末尾 `append` 任意两个字符,如两个空格。

用指针 `p` 指向原字符串末尾,`q` 指向现字符串末尾,`p`, `q` 从后往前遍历,当 `p` 遇到空格,`q` 位置依次要 `append` '02%',若不是空格,直接 `append` `p` 指向的字符。

> 🤔思路扩展:
在合并两个数组(包括字符串)时,如果从前往后复制每个数字(或字符)需要重复移动数字(或字符)多次,那么我们可以考虑从后往前复制,这样就能减少移动的次数,从而提高效率。

```java
/**
 * @author bingo
 * @since 2018/10/27
 */

public class Solution {
    /**
     * 将字符串中的所有空格替换为%20
     * @param str 字符串
     * @return 替换后的字符串
     */
    public String replaceSpace(StringBuffer str) {
        if (str == null || str.length() == 0) {
            return str.toString();
        }
        
        int len = str.length();
        for (int i = 0; i < len; ++i) {
            if (str.charAt(i) == ' ') {
                // append 两个空格
                str.append("  ");
            }
        }

        // p 指向原字符串末尾
        int p = len - 1;

        // q 指向现字符串末尾
        int q = str.length() - 1;

        while (p >= 0) {
            char ch = str.charAt(p--);
            if (ch == ' ') {
                str.setCharAt(q--, '0');
                str.setCharAt(q--, '2');
                str.setCharAt(q--, '%');
            } else {
                str.setCharAt(q--, ch);
            }
        }

        return str.toString();

    }
}
```


### 测试用例
1. 输入的字符串包含空格(空格位于字符串的最前面/最后面/中间;字符串有多个连续的空格);
2. 输入的字符串中没有空格;
3. 特殊输入测试(字符串是一个空指针;字符串是一个空字符串;字符串只有一个空格字符;字符串中有多个连续空格)。

================================================
FILE: docs/jianzhioffer/java/06_PrintListInReversedOrder.md
================================================
## 从尾到头打印链表

### 题目描述
输入一个链表,按链表值从尾到头的顺序返回一个 `ArrayList`。


### 解法
#### 解法一【推荐】
遍历链表,每个链表结点值 `push` 进栈,最后将栈中元素依次 `pop` 到 `list` 中。
```java
/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.ArrayList;
import java.util.Stack;

/**
 * @author bingo
 * @since 2018/10/28
 */
public class Solution {
    /**
     * 从尾到头打印链表
     * @param listNode 链表头节点
     * @return list
     */
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> res = new ArrayList<>();
        if (listNode == null) {
            return res;
        }
        Stack<Integer> stack = new Stack<>();
        while (listNode != null) {
            stack.push(listNode.val);
            listNode = listNode.next;
        }
        while (!stack.isEmpty()) {
            res.add(stack.pop());
        }
        
        return res;
    }
}
```

#### 解法二【不推荐】
利用递归方式:
- 若不是链表尾结点,继续递归;
- 若是,添加到 `list` 中。

这种方式不推荐,当递归层数过多时,容易发生 `Stack Overflow`。

```java
/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.ArrayList;
import java.util.Stack;

/**
 * @author bingo
 * @since 2018/10/28
 */
public class Solution {
    /**
     * 从尾到头打印链表
     * @param listNode 链表头结点
     * @return list
     */
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> res = new ArrayList<>();
        if (listNode == null) {
            return res;
        }
        
        addElement(listNode, res);
        return res;
        
    }
    
    private void addElement(ListNode listNode, ArrayList<Integer> res) {
        if (listNode.next != null) {
            // 递归调用
            addElement(listNode.next, res);
        }
        res.add(listNode.val);
    }
}
```


### 测试用例
1. 功能测试(输入的链表有多个结点;输入的链表只有一个结点);
2. 特殊输入测试(输入的链表结点指针为空)。

================================================
FILE: docs/jianzhioffer/java/07_ConstructBinaryTree.md
================================================
## 重建二叉树

### 题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 `{1,2,4,7,3,5,6,8}` 和中序遍历序列 `{4,7,2,1,5,3,8,6}`,则重建二叉树并返回。


### 解法
在二叉树的前序遍历序列中,第一个数字总是根结点的值。在中序遍历序列中,根结点的值在序列的中间,左子树的结点位于根结点左侧,而右子树的结点位于根结点值的右侧。

遍历中序序列,找到根结点,递归构建左子树与右子树。

注意添加特殊情况的 `if` 判断。

```java
/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */

/**
 * @author bingo
 * @since 2018/10/28
 */

public class Solution {
    /**
     * 重建二叉树
     * 
     * @param pre 先序序列
     * @param in  中序序列
     * @return 二叉树根结点
     */
    public TreeNode reConstructBinaryTree(int[] pre, int[] in) {
        if (pre == null || in == null || pre.length != in.length) {
            return null;
        }
        int n = pre.length;
        return constructBinaryTree(pre, 0, n - 1, in, 0, n - 1);
    }

    private TreeNode constructBinaryTree(int[] pre, int startPre, int endPre, int[] in, int startIn, int endIn) {
        TreeNode node = new TreeNode(pre[startPre]);
        if (startPre == endPre) {
            if (startIn == endIn) {
                return node;
            }
            throw new IllegalArgumentException("Invalid input!");
        }

        int inOrder = startIn;
        while (in[inOrder] != pre[startPre]) {
            ++inOrder;
            if (inOrder > endIn) {
                new IllegalArgumentException("Invalid input!");
            }
        }
        int len = inOrder - startIn;
        if (len > 0) {
            // 递归构建左子树
            node.left = constructBinaryTree(pre, startPre + 1, startPre + len, in, startIn, inOrder - 1);
        }

        if (inOrder < endIn) {
            // 递归构建右子树
            node.right = constructBinaryTree(pre, startPre + len + 1, endPre, in, inOrder + 1, endIn);
        }
        return node;

    }
}
```


### 测试用例
1. 普通二叉树(完全二叉树;不完全二叉树);
2. 特殊二叉树(所有结点都没有左/右子结点;只有一个结点的二叉树);
3. 特殊输入测试(二叉树根结点为空;输入的前序序列和中序序列不匹配)。

================================================
FILE: docs/jianzhioffer/java/08_NextNodeInBinaryTrees.md
================================================
## 二叉树的下一个结点

### 题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。


### 解法
对于结点 `pNode`:
- 如果它有右子树,则**右子树的最左结点**就是它的下一个结点;
- 如果它没有右子树,判断它与父结点 `pNode.next` 的位置情况:
    - 如果它是父结点的左孩子,那么父结点 `pNode.next` 就是它的下一个结点;
    - 如果它是父结点的右孩子,一直向上寻找,直到找到某个结点,它是它父结点的左孩子,那么该父结点就是 `pNode` 的下一个结点。

```java
/*
public class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
        this.val = val;
    }
}
*/

/**
 * @author bingo
 * @since 2018/10/28
 */

public class Solution {
    /**
     * 获取中序遍历结点的下一个结点
     * @param pNode 某个结点
     * @return pNode的下一个结点
     */
    public TreeLinkNode GetNext(TreeLinkNode pNode) {
        if (pNode == null) {
            return null;
        }
        
        if (pNode.right != null) {
            TreeLinkNode t = pNode.right;
            while (t.left != null) {
                t = t.left;
            }
            return t;
        }
        
        // 须保证 pNode.next 不为空,否则会出现 NPE
        if (pNode.next != null && pNode.next.left == pNode) {
            return pNode.next;
        }
        
        while (pNode.next != null) {
            if (pNode.next.left == pNode) {
                return pNode.next;
            }
            pNode = pNode.next;
        }
        
        return null;
        
    }
}
```


### 测试用例
1. 普通二叉树(完全二叉树;不完全二叉树);
2. 特殊二叉树(所有结点都没有左/右子结点;只有一个结点的二叉树;二叉树的根结点为空);
3. 不同位置的结点的下一个结点(下一个结点为当前结点的右子结点、右子树的最左子结点、父结点、跨层的父结点等;当前结点没有下一个结点)。

================================================
FILE: docs/jianzhioffer/java/09_01_QueueWithTwoStacks.md
================================================
## 用两个栈实现队列

### 题目描述
用两个栈来实现一个队列,完成队列的 `Push` 和 `Pop` 操作。 队列中的元素为 `int` 类型。


### 解法
`Push` 操作,每次都存入 `stack1`;
`Pop` 操作,每次从 `stack2` 取:
- `stack2` 栈不为空时,不能将 `stack1` 元素倒入;
- `stack2` 栈为空时,需要一次将 `stack1` 元素全部倒入。

```java
import java.util.Stack;

/**
 * @author bingo
 * @since 2018/10/28
 */

public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    
    public void push(int node) {
        stack1.push(node);
    }
    
    public int pop() {
        if (stack2.isEmpty()) {
            if (stack1.isEmpty()) {
                return -1;
            }
            while (!stack1.isEmpty()) {
                stack2.push(stack1.pop());
            }
        }
        return stack2.pop();
    }
}
```


### 测试用例
1. 往空的队列里添加、删除元素;
2. 往非空的队列添加、删除元素;
3. 连续删除元素直至队列为空。

================================================
FILE: docs/jianzhioffer/java/09_02_StackWithTwoQueues.md
================================================
## 用两个队列实现栈

### 题目描述
用两个队列来实现一个栈,完成栈的 `Push` 和 `Pop` 操作。 栈中的元素为 `int` 类型。


### 解法
`Push` 操作,每次都存入 `queue1`;
`Pop` 操作,每次从 `queue1` 取:
- 将 `queue1` 中的元素依次倒入 `queue2`,直到 `queue1` 剩下一个元素,这个元素就是要 `pop` 出去的;
- 将 `queue1` 与 `queue2` 进行交换,这样保证每次都从 `queue1` 中存取元素,`queue2` 只起到辅助暂存的作用。

```java
import java.util.LinkedList;
import java.util.Queue;

/**
 * @author bingo
 * @since 2018/10/29
 */

public class Solution {

    private Queue<Integer> queue1 = new LinkedList<>();
    private Queue<Integer> queue2 = new LinkedList<>();

    public void push(int node) {
        queue1.offer(node);
    }

    public int pop() {
        if (queue1.isEmpty()) {
            throw new RuntimeException("Empty stack!");
        }

        while (queue1.size() > 1) {
            queue2.offer(queue1.poll());
        }

        int val = queue1.poll();

        Queue<Integer> t = queue1;
        queue1 = queue2;
        queue2 = t;
        return val;

    }
}
```


### 测试用例
1. 往空的栈里添加、删除元素;
2. 往非空的栈添加、删除元素;
3. 连续删除元素直至栈为空。

================================================
FILE: docs/jianzhioffer/java/10_01_Fibonacci.md
================================================
## 斐波那契数列

### 题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第 `n` 项(从 `0` 开始,第 `0` 项为 `0`)。`n<=39`


### 解法
#### 解法一
采用递归方式,简洁明了,但效率很低,存在大量的重复计算。
```
                  f(10)
               /        \
            f(9)         f(8)
          /     \       /    \
       f(8)     f(7)  f(7)   f(6)
      /   \     /   \ 
   f(7)  f(6)  f(6) f(5)
```

```java

/**
 * @author bingo
 * @since 2018/10/29
 */

public class Solution {
    /**
     * 求斐波那契数列的第n项,n从0开始
     * @param n 第n项
     * @return 第n项的值
     */
    public int Fibonacci(int n) {
        if (n < 2) {
            return n;
        }
        // 递归调用
        return Fibonacci(n - 1) + Fibonacci(n - 2);
    }
}
```

#### 解法二
从下往上计算,递推,时间复杂度 `O(n)`。

```java

/**
 * @author bingo
 * @since 2018/10/29
 */

public class Solution {
    /**
     * 求斐波那契数列的第n项,n从0开始
     * @param n 第n项
     * @return 第n项的值
     */
    public int Fibonacci(int n) {
        if (n < 2) {
            return n;
        }
        int[] res = new int[n + 1];
        res[0] = 0;
        res[1] = 1;
        for (int i = 2; i <= n; ++i) {
            res[i] = res[i - 1] + res[i - 2];
        }
        return res[n];

    }
}
```


### 测试用例
1. 功能测试(如输入 3、5、10 等);
2. 边界值测试(如输入 0、1、2);
3. 性能测试(输入较大的数字,如 40、50、100 等)。

================================================
FILE: docs/jianzhioffer/java/10_02_JumpFloor.md
================================================
## 跳台阶

### 题目描述
一只青蛙一次可以跳上`1`级台阶,也可以跳上`2`级。求该青蛙跳上一个`n`级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

### 解法
跳上 `n` 级台阶,可以从 `n-1` 级跳 `1` 级上去,也可以从 `n-2` 级跳 `2` 级上去。所以
```
f(n) = f(n-1) + f(n-2)
```

```java
/**
 * @author bingo
 * @since 2018/11/23
 */

public class Solution {
    /**
     * 青蛙跳台阶
     * @param target 跳上的那一级台阶
     * @return 多少种跳法
     */
    public int JumpFloor(int target) {
        if (target < 3) {
            return target;
        }
        int[] res = new int[target + 1];
        res[1] = 1;
        res[2] = 2;
        for (int i = 3; i <= target; ++i) {
            res[i] = res[i - 1] + res[i - 2];
        }
        return res[target];
    }
}
```

### 测试用例
1. 功能测试(如输入 3、5、10 等);
2. 边界值测试(如输入 0、1、2);
3. 性能测试(输入较大的数字,如 40、50、100 等)。

================================================
FILE: docs/jianzhioffer/java/10_03_JumpFloorII.md
================================================
## 变态跳台阶

### 题目描述
一只青蛙一次可以跳上`1`级台阶,也可以跳上`2`级……它也可以跳上`n`级。求该青蛙跳上一个`n`级的台阶总共有多少种跳法。

### 解法
跳上 `n-1` 级台阶,可以从 `n-2` 级跳 `1` 级上去,也可以从 `n-3` 级跳 `2` 级上去...也可以从 `0` 级跳上去。那么
```
f(n-1) = f(0) + f(1) + ... + f(n-2) ①
```

跳上 `n` 级台阶,可以从 `n-1` 级跳 `1` 级上去,也可以从 `n-2` 级跳 `2` 级上去...也可以从 `0` 级跳上去。那么
```
f(n) = f(0) + f(1) + ... + f(n-2) + f(n-1)  ②

②-①:
f(n) - f(n-1) = f(n-1)
f(n) = 2f(n-1)
```

所以 f(n) 是一个等比数列:
```
f(n) = 2^(n-1)
```


```java
/**
 * @author bingo
 * @since 2018/11/23
 */

public class Solution {
    /**
     * 青蛙跳台阶II
     * @param target 跳上的那一级台阶
     * @return 多少种跳法
     */
    public int JumpFloorII(int target) {
        return (int) Math.pow(2, target - 1);
    }
}
```

### 测试用例
1. 功能测试(如输入 3、5、10 等);
2. 边界值测试(如输入 0、1、2);
3. 性能测试(输入较大的数字,如 40、50、100 等)。

================================================
FILE: docs/jianzhioffer/java/10_04_RectCover.md
================================================
## 矩形覆盖

### 题目描述
我们可以用`2*1`的小矩形横着或者竖着去覆盖更大的矩形。请问用`n`个`2*1`的小矩形无重叠地覆盖一个`2*n`的大矩形,总共有多少种方法?

### 解法
覆盖 `2*n` 的矩形:
- 可以先覆盖 `2*n-1` 的矩形,再覆盖一个 `2*1` 的矩形;
- 也可以先覆盖 `2*(n-2)` 的矩形,再覆盖两个 `1*2` 的矩形。

#### 解法一:利用数组存放结果
```java
/**
 * @author bingo
 * @since 2018/11/23
 */

public class Solution {
    /**
     * 矩形覆盖
     * @param target 2*target大小的矩形
     * @return 多少种覆盖方法
     */
    public int RectCover(int target) {
        if (target < 3) {
            return target;
        }
        int[] res = new int[target + 1];
        res[1] = 1;
        res[2] = 2;
        for (int i = 3; i <= target; ++i) {
            res[i] = res[i - 1] + res[i - 2];
        }
        return res[target];
    }
}
```

#### 解法二:直接用变量存储结果
```java
/**
 * @author bingo
 * @since 2018/11/23
 */

public class Solution {
    /**
     * 矩形覆盖
     * @param target 2*target大小的矩形
     * @return 多少种覆盖方法
     */
    public int RectCover(int target) {
        if (target < 3) {
            return target;
        }
        int res1 = 1;
        int res2 = 2;
        int res = 0;
        for (int i = 3; i <= target; ++i) {
            res = res1 + res2;
            res1 = res2;
            res2 = res;
        }
        return res;
    }
}
```


### 测试用例
1. 功能测试(如输入 3、5、10 等);
2. 边界值测试(如输入 0、1、2);
3. 性能测试(输入较大的数字,如 40、50、100 等)。

================================================
FILE: docs/jianzhioffer/java/11_MinNumberInRotatedArray.md
================================================
## 旋转数组的最小数字

### 题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组 `{3,4,5,1,2}` 为 `{1,2,3,4,5}` 的一个旋转,该数组的最小值为 `1`。 

**NOTE:**给出的所有元素都大于 `0`,若数组大小为 `0`,请返回 `0`。


### 解法
#### 解法一
直接遍历数组找最小值,时间复杂度 `O(n)`,不推荐。

```java

/**
 * @author bingo
 * @since 2018/10/30
 */

public class Solution {
    /**
     * 获取旋转数组的最小元素
     * @param array 旋转数组
     * @return 数组中的最小值
     */
    public int minNumberInRotateArray(int[] array) {
        if (array == null || array.length == 0) {
            return 0;
        }

        int n = array.length;
        if (n == 1 || array[0] < array[n - 1]) {
            return array[0];
        }

        int min = array[0];
        for (int i = 1; i < n; ++i) {
            min = array[i] < min ? array[i] : min;
        }

        return min;
    }

}
```

#### 解法二
利用指针 `p`,`q` 指向数组的首尾,如果 `array[p] < array[q]`,说明数组是递增数组,直接返回 `array[p]`。否则进行如下讨论。

计算中间指针 `mid`:
- 如果此时 `array[p]`, `array[q]`, `array[mid]` 两两相等,此时无法采用二分方式,只能通过遍历区间 `[p,q]` 获取最小值;
- 如果此时 `p`,`q` 相邻,说明此时 `q` 指向的元素是最小值,返回 `array[q]`;
- 如果此时 `array[mid] >= array[p]`,说明 `mid` 位于左边的递增数组中,最小值在右边,因此,把 `p` 指向 `mid`,此时保持了 `p` 指向左边递增子数组;
- 如果此时 `array[mid] <= array[q]`,说明 `mid` 位于右边的递增数组中,最小值在左边,因此,把 `q` 指向 `mid`,此时保持了 `q` 指向右边递增子数组。

```java


/**
 * @author bingo
 * @since 2018/10/30
 */

public class Solution {
    /**
     * 获取旋转数组的最小元素
     * @param array 旋转数组
     * @return 数组中的最小值
     */
    public int minNumberInRotateArray(int[] array) {
        if (array == null || array.length == 0) {
            return 0;
        }

        int p = 0;
        // mid初始为p,为了兼容当数组是递增数组(即不满足 array[p] >= array[q])时,返回 array[p]
        int mid = p;
        int q = array.length - 1;
        while (array[p] >= array[q]) {
            if (q - p == 1) {
                // 当p,q相邻时(距离为1),那么q指向的元素就是最小值
                mid = q;
                break;
            }
            mid = p + ((q - p) >> 1);

            // 当p,q,mid指向的值相等时,此时只能通过遍历查找最小值
            if (array[p] == array[q] && array[mid] == array[p]) {
                mid = getMinIndex(array, p, q);
                break;
            }

            if (array[mid] >= array[p]) {
                p = mid;
            } else if (array[mid] <= array[q]) {
                q = mid;
            }
        }

        return array[mid];


    }

    private int getMinIndex(int[] array, int p, int q) {
        int minIndex = p;
        for (int i = p + 1; i <= q; ++i) {
            minIndex = array[i] < array[minIndex] ? i : minIndex;
        }
        return minIndex;
    }
}
```


### 测试用例
1. 功能测试(输入的数组是升序排序数组的一个旋转,数组中有重复数字或者没有重复数字);
2. 边界值测试(输入的数组是一个升序排序的数组,只包含一个数字的数组);
3. 特殊输入测试(输入空指针)。

================================================
FILE: docs/jianzhioffer/java/12_StringPathInMatrix.md
================================================
## 矩阵中的路径

### 题目描述
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 `a b c e s f c s a d e e` 这样的 `3 X 4` 矩阵中包含一条字符串`"bcced"`的路径,但是矩阵中不包含`"abcb"`路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。

### 解法
回溯法。首先,任选一个格子作为路径起点。假设格子对应的字符为 ch,并且对应路径上的第 i 个字符。若相等,到相邻格子寻找路径上的第 i+1 个字符。重复这一过程。

```java
/**
 * @author bingo
 * @since 2018/11/20
 */

public class Solution {
    /**
     * 判断矩阵中是否包含某条路径
     * @param matrix 矩阵
     * @param rows 行数
     * @param cols 列数
     * @param str 路径
     * @return bool
     */
    public boolean hasPath(char[] matrix, int rows, int cols, char[] str) {
        if (matrix == null || rows < 1 || cols < 1 || str == null) {
            return false;
        }
        boolean[] visited = new boolean[matrix.length];
        int pathLength = 0;
        for (int i = 0; i < rows; ++i) {
            for (int j = 0; j < cols; ++j) {
                if (hasPath(matrix, rows, cols, str, i, j, pathLength, visited)) {
                    return true;
                }
            }
        }
        return false;
    }

    private boolean hasPath(char[] matrix, int rows, int cols, char[] str, int i, int j, int pathLength, boolean[] visited) {
        if (pathLength == str.length) {
            return true;
        }
        boolean hasPath = false;
        if (i >= 0 && i < rows && j >= 0 && j < cols && matrix[i * cols + j] == str[pathLength] && !visited[i * cols + j]) {
            ++pathLength;
            visited[i * cols + j] = true;
            hasPath = hasPath(matrix, rows, cols, str, i - 1, j, pathLength, visited)
                    || hasPath(matrix, rows, cols, str, i + 1, j, pathLength, visited)
                    || hasPath(matrix, rows, cols, str, i, j - 1, pathLength, visited)
                    || hasPath(matrix, rows, cols, str, i, j + 1, pathLength, visited);
            if (!hasPath) {
                --pathLength;
                visited[i * cols + j] = false;
            }
        }
        return hasPath;
    }
}

```

### 测试用例
1. 功能测试(在多行多列的矩阵中存在或者不存在路径);
2. 边界值测试(矩阵只有一行或者一列;矩阵和路径中的所有字母都是相同的);
3. 特殊输入测试(输入空指针)。

================================================
FILE: docs/jianzhioffer/java/13_RobotMove.md
================================================
## 机器人的移动范围

### 题目描述
地上有一个`m`行和`n`列的方格。一个机器人从坐标`0,0`的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于`k`的格子。 例如,当`k`为`18`时,机器人能够进入方格`(35,37)`,因为`3+5+3+7 = 18`。但是,它不能进入方格`(35,38)`,因为`3+5+3+8 = 19`。请问该机器人能够达到多少个格子?

### 解法
从坐标(0, 0) 开始移动,当它准备进入坐标(i, j),判断是否能进入,如果能,再判断它能否进入 4 个相邻的格子 (i-1, j), (i+1, j), (i, j-1), (i, j+1)。

```java
/**
 * @author bingo
 * @since 2018/11/20
 */

public class Solution {
    /**
     * 计算能到达的格子数
     * @param threshold 限定的数字
     * @param rows 行数
     * @param cols 列数
     * @return 格子数
     */
    public int movingCount(int threshold, int rows, int cols) {
        if (threshold < 0 || rows < 1 || cols < 1) {
            return 0;
        }
        boolean[] visited = new boolean[rows * cols];
        return getCount(threshold, 0, 0, rows, cols, visited);
    }

    private int getCount(int threshold, int i, int j, int rows, int cols, boolean[] visited) {
        if (check(threshold, i, j, rows, cols, visited)) {
            visited[i * cols + j] = true;
            return 1
                    + getCount(threshold, i - 1, j, rows, cols, visited)
                    + getCount(threshold, i + 1, j, rows, cols, visited)
                    + getCount(threshold, i, j - 1, rows, cols, visited)
                    + getCount(threshold, i, j + 1, rows, cols, visited);
        }
        return 0;
    }

    private boolean check(int threshold, int i, int j, int rows, int cols, boolean[] visited) {
        return i >= 0
                && i < rows
                && j >= 0
                && j < cols
                && !visited[i * cols + j]
                && getDigitSum(i) + getDigitSum(j) <= threshold;
    }

    private int getDigitSum(int i) {
        int res = 0;
        while (i > 0) {
            res += i % 10;
            i /= 10;
        }
        return res;
    }
}
```

### 测试用例
1. 功能测试(方格为多行多列;k 为正数);
2. 边界值测试(方格只有一行或者一列;k = 0);
3. 特殊输入测试(k < 0)。

================================================
FILE: docs/jianzhioffer/java/14_CuttingRope.md
================================================
## 剪绳子

### 题目描述
给你一根长度为`n`绳子,请把绳子剪成`m`段(`m`、`n`都是整数,`n>1`并且`m≥1`)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]*k[1]*…*k[m]可能的最大乘积是多少?例如当绳子的长度是 8 时,我们把它剪成长度分别为 `2、3、3` 的三段,此时得到最大的乘积`18`。

### 解法
#### 解法一:动态规划法
时间复杂度`O(n²)`,空间复杂度`O(n)`。

- 长度为 2,只可能剪成长度为 1 的两段,因此 f(2)=1
- 长度为 3,剪成长度分别为 1 和 2 的两段,乘积比较大,因此 f(3) = 2
- 长度为 n,在剪第一刀的时候,有 n-1 种可能的选择,剪出来的绳子又可以继续剪,可以看出,原问题可以划分为子问题,子问题又有重复子问题。

```java
/**
 * @author bingo
 * @since 2018/11/20
 */

public class Solution {

    /**
     * 剪绳子求最大乘积
     * @param length 绳子长度
     * @return 乘积最大值
     */
    public int maxProductAfterCutting(int length) {
        if (length < 2) {
            return 0;
        }
        if (length < 4) {
            return length - 1;
        }

        // res[i] 表示当长度为i时的最大乘积
        int[] res = new int[length + 1];
        res[1] = 1;
        res[2] = 2;
        res[3] = 3;
        // 从长度为4开始计算
        for (int i = 4; i <= length; ++i) {
            int max = 0;
            for (int j = 1; j <= i / 2; ++j) {
                max = Math.max(max, res[j] * res[i - j]);
            }
            res[i] = max;
        }

        return res[length];

    }
}

```

#### 贪心算法
时间复杂度`O(1)`,空间复杂度`O(1)`。

贪心策略:
- 当 n>=5 时,尽可能多地剪长度为 3 的绳子
- 当剩下的绳子长度为 4 时,就把绳子剪成两段长度为 2 的绳子。

**证明:**
- 当 n>=5 时,可以证明 2(n-2)>n,并且 3(n-3)>n。也就是说,当绳子剩下长度大于或者等于 5 的时候,可以把它剪成长度为 3 或者 2 的绳子段。
- 当 n>=5 时,3(n-3)>=2(n-2),因此,应该尽可能多地剪长度为 3 的绳子段。
- 当 n=4 时,剪成两根长度为 2 的绳子,其实没必要剪,只是题目的要求是至少要剪一刀。

```java
/**
 * @author bingo
 * @since 2018/11/20
 */

public class Solution {

    /**
     * 剪绳子求最大乘积
     * @param length 绳子长度
     * @return 乘积最大值
     */
    public int maxProductAfterCutting(int length) {
        if (length < 2) {
            return 0;
        }
        if (length < 4) {
            return length - 1;
        }

        int timesOf3 = length / 3;
        if (length % 3 == 1) {
            --timesOf3;
        }
        int timesOf2 = (length - timesOf3 * 3) >> 1;
        return (int) (Math.pow(3, timesOf3) * Math.pow(2, timesOf2));
    }
}

```

### 测试用例
1. 功能测试(绳子的初始长度大于 5);
2. 边界值测试(绳子的初始长度分别为 0、1、2、3、4)。

================================================
FILE: docs/jianzhioffer/java/15_NumberOf1InBinary.md
================================================
## 二进制中 1 的个数

### 题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

### 解法
#### 解法一
利用整数 1,依次左移每次与 n 进行与运算,若结果不为0,说明这一位上数字为 1,++cnt。

此解法 i 需要左移 32 次。

不要用 n 去右移并与 1 进行与运算,因为n 可能为负数,右移时会陷入死循环。

```java
public class Solution {
    public int NumberOf1(int n) {
        int cnt = 0;
        int i = 1;
        while (i != 0) {
            if ((n & i) != 0) {
                ++cnt;
            }
            i <<= 1;
        }
        return cnt;
    }
}
```

#### 解法二(推荐)
- 运算 (n - 1) & n,直至 n 为 0。运算的次数即为 n 的二进制中 1 的个数。

因为 n-1 会将 n 的最右边一位 1 改为 0,如果右边还有 0,则所有 0 都会变成 1。结果与 n 进行与运算,会去除掉最右边的一个1。

举个栗子:
```
若 n = 1100,
n - 1 = 1011
n & (n - 1) = 1000

即:把最右边的 1 变成了 0。
```

> 把一个整数减去 1 之后再和原来的整数做位与运算,得到的结果相当于把整数的二进制表示中最右边的 1 变成 0。很多二进制的问题都可以用这种思路解决。

```java
/**
 * @author bingo
 * @since 2018/11/20
 */

public class Solution {
    /**
     * 计算整数的二进制表示里1的个数
     * @param n 整数
     * @return 1的个数
     */
    public int NumberOf1(int n) {
        int cnt = 0;
        while (n != 0) {
            n = (n - 1 ) & n;
            ++cnt;
        }
        return cnt;
    }
}

```

### 测试用例
1. 正数(包括边界值 1、0x7FFFFFFF);
2. 负数(包括边界值 0x80000000、0xFFFFFFFF);
3. 0。

================================================
FILE: docs/jianzhioffer/java/16_Power.md
================================================
## 数值的整数次方

### 题目描述
给定一个 `double` 类型的浮点数 `base` 和 `int` 类型的整数 `exponent`。求 `base`的 `exponent` 次方。

### 解法
注意判断值数是否小于 0。另外 0 的 0 次方没有意义,也需要考虑一下,看具体题目要求。

```java
/**
 * @author bingo
 * @since 2018/11/20
 */

public class Solution {
    /**
     * 计算数值的整数次方
     * @param base 底数
     * @param exponent 指数
     * @return 数值的整数次方
     */
    public double Power(double base, int exponent) {
        double result = 1.0;
        int n = Math.abs(exponent);
        for (int i = 0; i < n; ++i) {
            result *= base;
        }

        return exponent < 0 ? 1.0 / result : result;
    }
}

```

### 测试用例
1. 把底数和指数分别设为正数、负数和零。

================================================
FILE: docs/jianzhioffer/java/17_Print1ToMaxOfNDigits.md
================================================
## 打印从 1 到最大的 n 位数

### 题目描述
输入数字 `n`,按顺序打印出从 `1` 最大的 `n` 位十进制数。比如输入 `3`,则打印出 `1、2、3` 一直到最大的 3 位数即 999。

### 解法
此题需要注意 n 位数构成的数字可能超出最大的 int 或者 long long 能表示的范围。因此,采用字符数组来存储数字。

关键是:
- 对字符数组表示的数进行递增操作
- 输出数字(0开头的需要把0去除)

```java
/**
 * @author bingo
 * @since 2018/11/20
 */

public class Solution {

    /**
     * 打印从1到最大的n位数
     * @param n n位
     */
    public void print1ToMaxOfNDigits(int n) {
        if (n < 1) {
            return;
        }

        char[] chars = new char[n];
        for (int i = 0; i < n; ++i) {
            chars[i] = '0';
        }

        while (!increment(chars)) {
            printNumber(chars);
        }
    }

    /**
     * 打印数字(去除前面的0)
     * @param chars 数字数组
     */
    private void printNumber(char[] chars) {
        int index = 0;
        int n = chars.length;
        for (char ch : chars) {
            if (ch != '0') {
                break;
            }
            ++index;
        }
        StringBuilder sb = new StringBuilder();
        for (int i = index; i < n; ++i) {
            sb.append(chars[i]);
        }
        System.out.println(sb.toString());
    }

    /**
     * 数字加1
     * @param chars 数字数组
     * @return 是否溢出
     */
    private boolean increment(char[] chars) {
        boolean flag = false;
        int n = chars.length;
        int carry = 1;
        for (int i = n - 1; i >= 0; --i) {

            int num = chars[i] - '0' + carry;
            if (num > 9) {
                if (i == 0) {
                    flag = true;
                    break;
                }
                chars[i] = '0';
            } else {
                ++chars[i];
                break;
            }
        }
        return flag;
    }
}
```

### 测试用例
1. 功能测试(输入 1、2、3......);
2. 特殊输入测试(输入 -1、0)。

================================================
FILE: docs/jianzhioffer/java/18_01_DeleteNodeInList.md
================================================
## 在O(1)时间内删除链表节点

### 题目描述
给定单向链表的头指针和一个节点指针,定义一个函数在 O(1) 时间内删除该节点。

### 解法
判断要删除的节点是否是尾节点,若是,直接删除;若不是,把要删除节点的下一个节点赋给要删除的节点即可。

### ```进行n次操作,平均时间复杂度为:( (n-1) * O(1) + O(n) ) / n = O(1),所以符合题目上说的O(1)```

```java
/**
 * @author bingo
 * @since 2018/11/20
 */

public class Solution {

    class ListNode {
        int val;
        ListNode next;
    }

    /**
     * 删除链表的节点
     * @param head 链表头节点
     * @param tobeDelete 要删除的节点
     */
    public ListNode deleteNode(ListNode head, ListNode tobeDelete) {
        if (head == null || tobeDelete == null) {
            return head;
        }

        // 删除的不是尾节点
        if (tobeDelete.next != null) {
            tobeDelete.val = tobeDelete.next.val;
            tobeDelete.next = tobeDelete.next.next;
        }
        // 链表中仅有一个节点
        else if (head == tobeDelete) {
            head = null;
        }
        // 删除的是尾节点
        else {
            ListNode ptr = head;
            while (ptr.next != tobeDelete) {
                ptr = ptr.next;	
          	}
            ptr.next = null;
        }

        return head;
    }
}
```

### 测试用例
1. 功能测试(从有多个节点的链表的中间/头部/尾部删除一个节点;从只有一个节点的链表中删除唯一的节点);
2. 特殊输入测试(指向链表头节点的为空指针;指向要删除节点的为空指针)。


================================================
FILE: docs/jianzhioffer/java/18_02_DeleteDuplicatedNode.md
================================================
## 删除链表中重复的节点

### 题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表`1->2->3->3->4->4->5` 处理后为 `1->2->5`。

### 解法
#### 解法一:递归

```java
/**
 * @author bingo
 * @since 2018/11/21
 */

/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    /**
     * 删除链表重复的节点
     * @param pHead 链表头节点
     * @return 删除节点后的链表
     */
    public ListNode deleteDuplication(ListNode pHead) {
        if (pHead == null || pHead.next == null) {
            return pHead;
        }

        if (pHead.val == pHead.next.val) {
            if (pHead.next.next == null) {
                return null;
            }
            if (pHead.next.next.val == pHead.val) {
                return deleteDuplication(pHead.next);
            }
            return deleteDuplication(pHead.next.next);
        }
        pHead.next = deleteDuplication(pHead.next);
        return pHead;
    }
}
```

#### 解法二
```java
/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    public ListNode deleteDuplication(ListNode pHead) {
        if (pHead == null || pHead.next == null) {
            return pHead;
        }
        
        ListNode pre = null;
        ListNode cur = pHead;
        while (cur != null) {
            if (cur.next != null && cur.next.val == cur.val) {
                int val = cur.val;
                while (cur.next != null && cur.next.val == val) {
                    cur = cur.next;
                }
                if (pre == null) {
                    pHead = cur.next;
                } else {
                    pre.next = cur.next;
                }
            } else {
                pre = cur;
            }
            cur = cur.next;
        }
        return pHead;
    }
}
```

### 测试用例
1. 功能测试(重复的节点位于链表的头部/中间/尾部;链表中没有重复的节点);
2. 特殊输入测试(指向链表头节点的为空指针;链表中所有节点都是重复的)。

================================================
FILE: docs/jianzhioffer/java/19_RegularExpressionsMatching.md
================================================
## 正则表达式匹配

### 题目描述
请实现一个函数用来匹配包括`.`和`*`的正则表达式。模式中的字符`.`表示任意一个字符,而`*`表示它前面的字符可以出现任意次(包含`0`次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串`aaa`与模式`a.a`和`ab*ac*a`匹配,但是与`aa.a`和`ab*a`均不匹配。

### 解法
判断模式中第二个字符是否是 `*`:
- 若是,看如果模式串第一个字符与字符串第一个字符是否匹配:
    - 1. 若不匹配,在模式串上向右移动两个字符`j+2`,相当于 a* 被忽略
    - 2. 若匹配,字符串后移`i+1`。此时模式串可以移动两个字符`j+2`,也可以不移动`j`。
- 若不是,看当前字符与模式串的当前字符是否匹配,即 str[i] == pattern[j] || pattern[j] == '.':
    - 1. 若匹配,则字符串与模式串都向右移动一位,`i+1`,`j+1`。
    - 2. 若不匹配,返回 fasle。

```java
/**
 * @author bingo
 * @since 2018/11/21
 */

public class Solution {
    /**
     * 判断字符串是否与模式串匹配
     * @param str 字符串
     * @param pattern 模式串
     * @return 是否匹配
     */
    public boolean match(char[] str, char[] pattern) {
        if (str == null || pattern == null) {
            return false;
        }
        return match(str, 0, str.length, pattern, 0, pattern.length);
    }

    private boolean match(char[] str, int i, int len1,
                          char[] pattern, int j, int len2) {
        if (i == len1 && j == len2) {
            return true;
        }

        // "",".*"
        if (i != len1 && j == len2) {
            return false;
        }

        if (j + 1 < len2 && pattern[j + 1] == '*') {
            if (i < len1 && (str[i] == pattern[j] || pattern[j] == '.')) {
                return match(str, i, len1, pattern, j + 2, len2)
                        || match(str, i + 1, len1, pattern, j, len2)
                        || match(str, i + 1, len1, pattern,j + 2, len2);
            }

            // "",".*"
            return match(str, i, len1, pattern, j + 2, len2);

        }
        if (i < len1 && (str[i] == pattern[j] || pattern[j] == '.')) {
            return match(str, i + 1, len1, pattern, j + 1, len2);
        }
        return false;

    }
}
```

### 测试用例
1. 功能测试(模式字符串里包含普通字符、`.`、`*`;模式字符串和输入字符串匹配/不匹配);
2. 特殊输入测试(输入字符串和模式字符串是空指针、空字符串)。

================================================
FILE: docs/jianzhioffer/java/20_NumericStrings.md
================================================
## 表示数值的字符串

### 题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

### 解法

#### 解法一

利用正则表达式匹配即可。
```
[]  : 字符集合
()  : 分组
?   : 重复 0 ~ 1
+   : 重复 1 ~ n
*   : 重复 0 ~ n
.   : 任意字符
\\. : 转义后的 .
\\d : 数字
```

```java
/**
 * @author bingo
 * @since 2018/11/21
 */

public class Solution {
    /**
     * 判断是否是数字
     * @param str
     * @return
     */
    public boolean isNumeric(char[] str) {
        return str != null 
                && str.length != 0 
                && new String(str).matches("[+-]?\\d*(\\.\\d+)?([eE][+-]?\\d+)?");
    }
}
```

#### 解法二【剑指offer解法】

表示数值的字符串遵循模式`A[.[B]][e|EC]`或者`.B[e|EC]`,其中A为数值的整数部分,B紧跟小数点为数值的小数部分,C紧跟着e或者E为数值的指数部分。上述A和C都有可能以 `+` 或者 `-` 开头的0~9的数位串,B也是0~9的数位串,但前面不能有正负号。

```java
/**
 * @author mcrwayfun
 * @version v1.0
 * @date Created in 2018/12/29
 * @description
 */
public class Solution {

    private int index = 0;

    /**
     * 判断是否是数值
     * @param  str 
     * @return 
     */
    public boolean isNumeric(char[] str) {
        if (str == null || str.length < 1) {
            return false;
        }

        // 判断是否存在整数
        boolean flag = scanInteger(str);

        // 小数部分
        if (index < str.length && str[index] == '.') {
            index++;
            // 小数部分可以有整数或者没有整数
            // 所以使用 ||
            flag = scanUnsignedInteger(str) || flag;
        }

        if (index < str.length && (str[index] == 'e' || str[index] == 'E')) {
            index++;
            // e或E前面必须有数字
            // e或者E后面必须有整数
            // 所以使用 &&
            flag = scanInteger(str) && flag;
        }

        return flag && index == str.length;

    }

    private boolean scanInteger(char[] str) {
        // 去除符号
        while (index < str.length && (str[index] == '+' || str[index] == '-')) {
            index++;
        }

        return scanUnsignedInteger(str);
    }

    private boolean scanUnsignedInteger(char[] str) {
        int start = index;
        while (index < str.length && str[index] >= '0' && str[index] <= '9') {
            index++;
        }
        // 判断是否存在整数
        return index > start;
    }
}
```



### 测试用例

1. 功能测试(正数或者负数;包含或者不包含整数部分的数值;包含或者不包含效数部分的值;包含或者不包含指数部分的值;各种不能表达有效数值的字符串);
2. 特殊输入测试(输入字符串和模式字符串是空指针、空字符串)。

================================================
FILE: docs/jianzhioffer/java/21_ReorderArray.md
================================================
## 调整数组顺序使奇数位于偶数前面

### 题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

### 解法
#### 解法一
计算出奇数的个数,就很容易写出来了。

```java
import java.util.Arrays;

/**
 * @author bingo
 * @since 2018/11/21
 */

public class Solution {
    /**
     * 调整数组元素顺序,使得奇数元素位于偶数元素前面,且保证奇数和奇数,偶数和偶数之间的相对位置不变。
     * @param array 数组
     */
    public void reOrderArray(int [] array) {
        if (array == null || array.length < 2) {
            return;
        }

        int numsOfOdd = 0;
        for (int val : array) {
            if (val % 2 == 1) {
                ++numsOfOdd;
            }
        }
        int[] bak = Arrays.copyOf(array, array.length);
        int i = 0, j = numsOfOdd;
        for (int val : bak) {
            if (val % 2 == 1) {
                array[i++] = val;
            } else {
                array[j++] = val;
            }
        }
    }

}
```

#### 解法二
```java
import java.util.Arrays;

public class Solution {
    public void reOrderArray(int [] array) {
        if (array == null || array.length < 2) {
            return;
        }
        Integer[] bak = new Integer[array.length];
        Arrays.setAll(bak, i -> array[i]);
        Arrays.sort(bak, (x, y) -> (y & 1) - (x & 1));
        Arrays.setAll(array, i -> bak[i]);
    }
    
}
```

### 测试用例
1. 功能测试(输入数组中的奇数、偶数交替出现;输入的数组中所有偶数都出现在奇数的前面;输入的数组中所有偶数都出现在奇数的前面;输入的数组中所有奇数都出现在偶数的前面);
2. 特殊输入测试(输入空指针;输入的数组只包含一个数字)。

================================================
FILE: docs/jianzhioffer/java/22_KthNodeFromEnd.md
================================================
## 链表中倒数第k个结点

### 题目描述
输入一个链表,输出该链表中倒数第k个结点。

### 解法
pre 指针走 `k-1` 步。之后 cur 指针指向 phead,然后两个指针同时走,直至 pre 指针到达尾结点。

> 当用一个指针遍历链表不能解决问题的时候,可以尝试用两个指针来遍历链表。可以让其中一个指针遍历的速度快一些。

此题需要考虑一些特殊情况。比如 k 的值小于 0 或者大于链表长度。

```java
/**
 * @author bingo
 * @since 2018/11/21
 */

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    /**
     * 找出链表倒数第k个节点,k从1开始
     * @param head 链表头部
     * @param k 第k个节点
     * @return 倒数第k个节点
     */
    public ListNode FindKthToTail(ListNode head,int k) {
        if (head == null || k < 1) {
            return null;
        }

        ListNode pre = head;
        for (int i = 0; i < k - 1; ++i) {
            if (pre.next != null) {
                pre = pre.next;
            } else {
                return null;
            }
        }

        ListNode cur = head;
        while (pre.next != null) {
            pre = pre.next;
            cur = cur.next;
        }
        return cur;
    }
}
```

### 测试用例
1. 功能测试(第 k 个节点在链表的中间/头部/尾部);
2. 特殊输入测试(输入空指针;链表的节点总数小于 k;k=0)。

================================================
FILE: docs/jianzhioffer/java/23_EntryNodeInListLoop.md
================================================
## 链表中环的入口结点

### 题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出`null`。

### 解法
- 先利用快慢指针。若能相遇,说明存在环,且相遇点一定是在环上;若没有相遇,说明不存在环,返回 `null`。
- 固定当前相遇点,用一个指针继续走,同时累积结点数。计算出环的结点个数 `cnt`。
- 指针 p1 先走 `cnt` 步,p2 指向链表头部,之后 `p1`,`p2` 同时走,相遇时,相遇点一定是在环的入口处。因为 `p1` 比 `p2` 多走了环的一圈。

```java

/**
 * @author bingo
 * @since 2018/11/22
 */

/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {

    /**
     * 求链表环的入口,若没有环,返回null
     * @param pHead 链表头
     * @return 环的入口点
     */
    public ListNode EntryNodeOfLoop(ListNode pHead) {
        if (pHead == null || pHead.next == null) {
            return null;
        }
        ListNode fast = pHead;
        ListNode slow = pHead;
        boolean flag = false;
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
            if (fast == slow) {
                flag = true;
                break;
            }
        }

        // 快指针与慢指针没有相遇,说明无环,返回 null
        if (!flag) {
            return null;
        }

        ListNode cur = slow.next;
        // 求出环中结点个数
        int cnt = 1;
        while (cur != slow) {
            cur = cur.next;
            ++cnt;
        }

        // 指针p1先走cnt步
        ListNode p1 = pHead;
        for (int i = 0; i < cnt; ++i) {
            p1 = p1.next;
        }

        // p2指向链表头,然后p1/p2同时走,首次相遇的地方就是环的入口
        ListNode p2 = pHead;
        while (p1 != p2) {
            p1 = p1.next;
            p2 = p2.next;
        }
        return p1;
    }
}
```

### 测试用例
1. 功能测试(链表中包含/不包含环;链表中有多个或者只有一个节点);
2. 特殊输入测试(链表头节点为空指针)。

================================================
FILE: docs/jianzhioffer/java/24_ReverseList.md
================================================
## 反转链表

### 题目描述
输入一个链表,反转链表后,输出新链表的表头。

### 解法
#### 解法一
利用头插法解决。

```java

/**
 * @author bingo
 * @since 2018/11/22
 */

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    /**
     * 反转链表
     * @param head 链表头部
     * @return 反转后的链表
     */
    public ListNode ReverseList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }

        ListNode dummy = new ListNode(-1);
        dummy.next = null;
        ListNode p1 = head;
        ListNode p2 = p1.next;
        while (p1 != null) {
            p1.next = dummy.next;
            dummy.next = p1;
            p1 = p2;
            if (p1 == null) {
                break;
            }
            p2 = p1.next;
        }

        return dummy.next;
    }
}
```

#### 解法二:递归

```java
/**
 * @author bingo
 * @since 2018/11/22
 */


/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode ReverseList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        
        ListNode next = ReverseList(head.next);
        ListNode cur = next;
        while (cur.next != null) {
            cur = cur.next;
        }
        cur.next = head;
        head.next = null;
        return next;
    }
}
```

### 测试用例
1. 功能测试(链表中有多个结点/只有一个节点);
2. 特殊输入测试(链表头节点为空指针)。

================================================
FILE: docs/jianzhioffer/java/25_MergeSortedLists.md
================================================
## 合并两个排序的链表

### 题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

### 解法
#### 解法一
同时遍历两链表进行 `merge`。

```java

/**
 * @author bingo
 * @since 2018/11/22
 */

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    /**
     * 合并两个排序链表
     * @param list1 链表1
     * @param list2 链表2
     * @return 合并后的单调不递减链表
     */
    public ListNode Merge(ListNode list1, ListNode list2) {
        if (list1 == null) {
            return list2;
        }
        if (list2 == null) {
            return list1;
        }

        ListNode dummy = new ListNode(-1);
        ListNode cur = dummy;
        ListNode p1 = list1;
        ListNode p2 = list2;
        while (p1 != null && p2 != null) {
            if (p1.val < p2.val) {
                ListNode t = p1.next;
                cur.next = p1;
                p1.next = null;
                p1 = t;
            } else {
                ListNode t = p2.next;
                cur.next = p2;
                p2.next = null;
                p2 = t;
            }
            cur = cur.next;
        }

        cur.next = p1 == null ? p2 : p1;
        return dummy.next;

    }
}
```

#### 解法二:递归
```java

/**
 * @author bingo
 * @since 2018/11/22
 */

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    /**
     * 合并两个排序链表
     * @param list1 链表1
     * @param list2 链表2
     * @return 合并后的单调不递减链表
     */
    public ListNode Merge(ListNode list1, ListNode list2) {
        if (list1 == null) {
            return list2;
        }
        if (list2 == null) {
            return list1;
        }

        if (list1.val < list2.val) {
            list1.next = Merge(list1.next, list2);
            return list1;
        }

        list2.next = Merge(list1, list2.next);
        return list2;
    }
}
```

### 测试用例
1. 功能测试(输入的两个链表有多个节点;节点的值互不相同或者存在值相等的多个节点);
2. 特殊输入测试(两个链表的一个或者两个头节点为空指针;两个链表中只有一个节点)。

================================================
FILE: docs/jianzhioffer/java/26_SubstructureInTree.md
================================================
## 树的子结构

### 题目描述
输入两棵二叉树`A`,`B`,判断`B`是不是`A`的子结构。(ps:我们约定空树不是任意一个树的子结构)

### 解法
递归方式遍历:

- 在树A中找到和树B的根结点值一样的结点R
- 判断树A以R为根结点的子树是否包含与树B一样的结构

这道题的time complexity应该为O(n * m),其中n为root1的节点数,m为root2的节点数。

```java
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }
}
*/

/**
 * @author mcrwayfun
 * @version v1.0
 * @date Created in 2019/01/01
 * @description
 */
public class Solution {

    public boolean HasSubtree(TreeNode root1, TreeNode root2) {

        if (root1 == null || root2 == null) {
            return false;
        }

        return isSame(root1, root2) || 
                HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
    }

    private boolean isSame(TreeNode root1, TreeNode root2) {

        if (root2 == null) {
            return true;
        }

        // 在root2,root1遍历完成后,仍未找到符合的结构,返回false
        if (root1 == null) {
            return false;
        }

        if (root1.val != root2.val) {
            return false;
        }

        return isSame(root1.left, root2.left) && isSame(root1.right, root2.right);
    }

}
```

### 测试用例
1. 功能测试(树A和树B都是普通的二叉树;树B是/不是树A的子结构);
2. 特殊输入测试(两棵二叉树的一个或者两个根结点为空指针,二叉树的所有结点都没有左/右子树)。

================================================
FILE: docs/jianzhioffer/java/27_MirrorOfBinaryTree.md
================================================
## 二叉树的镜像

### 题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。

```
源二叉树 
    	    8
    	   /  \
    	  6   10
    	 / \  / \
    	5  7 9 11

镜像二叉树
    	    8
    	   /  \
    	  10   6
    	 / \  / \
    	11 9 7  5
```

### 解法
将根结点的左右孩子互换,之后递归左右孩子。

```java

/**
 * @author bingo
 * @since 2018/11/22
 */

/*
 public class TreeNode {
 int val = 0;
 TreeNode left = null;
 TreeNode right = null;

 public TreeNode(int val) {
 this.val = val;

 }

 }
 */
public class Solution {
    /**
     * 将二叉树转换为它的镜像
     * @param root 二叉树的根结点
     */
    public void Mirror(TreeNode root) {
        if (root == null || !hasChild(root)) {
            return;
        }

        TreeNode t = root.left;
        root.left = root.right;
        root.right = t;
        Mirror(root.left);
        Mirror(root.right);
    }

    private boolean hasChild(TreeNode root) {
        return root.left != null || root.right != null;
    }
}
```

### 测试用例
1. 功能测试(普通的二叉树;二叉树的所有结点都没有左/右子树;只有一个结点的二叉树);
2. 特殊输入测试(二叉树的根结点为空指针)。

================================================
FILE: docs/jianzhioffer/java/28_SymmetricalBinaryTree.md
================================================
## 对称的二叉树

### 题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

### 解法
比较二叉树的前序遍历序列和对称前序遍历序列是否一样,若是,说明是对称的。

```java

/**
 * @author bingo
 * @since 2018/11/22
 */

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    /**
     * 判断是否是对称二叉树
     * @param pRoot 二叉树的根结点
     * @return 是否为对称二叉树
     */
    boolean isSymmetrical(TreeNode pRoot) {
        return isSymmetrical(pRoot, pRoot);
    }

    private boolean isSymmetrical(TreeNode pRoot1, TreeNode pRoot2) {
        if (pRoot1 == null && pRoot2 == null) {
            return true;
        }
        if (pRoot1 == null || pRoot2 == null) {
            return false;
        }
        if (pRoot1.val != pRoot2.val) {
            return false;
        }

        return isSymmetrical(pRoot1.left, pRoot2.right) && isSymmetrical(pRoot1.right, pRoot2.left);

    }
}
```

### 测试用例
1. 功能测试(对称的二叉树;因结构而不对称的二叉树;结构对称但节点的值不对称的二叉树);
2. 特殊输入测试(二叉树的根结点为空指针;只有一个节点的二叉树;所有节点的值都相同的二叉树)。

================================================
FILE: docs/jianzhioffer/java/29_PrintMatrix.md
================================================
## 顺时针打印矩阵

### 题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下 `4 X 4` 矩阵: 
```
1   2   3   4
5   6   7   8
9   10  11  12
13  14  15  16
```

则依次打印出数字:
```
1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
```
### 解法
剑指offer上的思路有点复杂,需要考虑坐标变换太多,考虑用另一种思路来解决。

在矩阵中,使用左上角坐标(tR,tC)和右下角的坐标(dR,dC)就可以表示一个矩阵。比如题目中的矩阵,当(tR,tC) = (0,0)和(dR,dC) = (3,3)时,表示的子矩阵就是整个矩阵:

```java
1	2	3	4
5			8
9			12
13	14	15	16    
```

当外层循环遍历后,可以令tR和tC加1,dR和dC减1,执行内层循环。当左上角的坐标跑到右下角坐标的右方或者下方,则整个过程就终止。

```java
/**
 * @author mcrwayfun
 * @version 1.0
 * @description
 * @date Created in 2019/1/2
 */
public class Solution {
    /**
     * 转圈打印矩阵
     * @param matrix 矩阵
     * @return 存放结果的list
     */
    public ArrayList<Integer> printMatrix(int[][] matrix) {
        ArrayList<Integer> reList = new ArrayList<>();
        if (matrix == null) {
            return reList;
        }

        int tR = 0;
        int tC = 0;
        int dR = matrix.length - 1;
        int dC = matrix[0].length - 1;

        while (tR <= dR && tC <= dC) {
            printMatrix(matrix, tR++, tC++, dR--, dC--, reList);
        }

        return reList;
    }

    public void printMatrix(int[][] matrix, int tR, int tC, int dR, int dC, ArrayList<Integer> reList) {
        // 只有一行
        if (tR == dR) {
            for (int i = tC; i <= dC; i++) {
                reList.add(matrix[tR][i]);
            }
        }
        // 只有一列
        else if (tC == dC) {
            for (int i = tR; i <= dR; i++) {
                reList.add(matrix[i][tC]);
            }
        } else {
            int curR = tR;
            int curC = tC;
            // 从左到右
            while (curC != dC) {
                reList.add(matrix[tR][curC]);
                curC++;
            }
            // 从上到下
            while (curR != dR) {
                reList.add(matrix[curR][dC]);
                curR++;
            }
            // 从右到左
            while (curC != tC) {
                reList.add(matrix[dR][curC]);
                curC--;
            }
            // 从下到上
            while (curR != tR) {
                reList.add(matrix[curR][tC]);
                curR--;
            }
        }

    }
}
```

### 测试用例
1. 数组中有多行多列;数组中只有一行;数组中只有一列;数组中只有一行一列。

================================================
FILE: docs/jianzhioffer/java/30_MinInStack.md
================================================
## 包含min函数的栈

### 题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为`O(1)`)。

### 解法
定义两个`stack`。

压栈时,先将元素`node`压入`stack1`。然后判断`stack2`的情况:
- `stack2`栈为空或者栈顶元素大于`node`,则将`node`压入`stack2`中。
- `stack2`栈不为空且栈定元素小于`node`,则重复压入栈顶元素。

获取最小元素时,从`stack2`中获取栈顶元素即可。

```java
import java.util.Stack;

/**
 * @author bingo
 * @since 2018/11/22
 */


public class Solution {

    private Stack<Integer> stack1 = new Stack<>();
    private Stack<Integer> stack2 = new Stack<>();

    /**
     * 压栈
     * @param node 待压入的元素
     */
    public void push(int node) {
        stack1.push(node);
        if (stack2.isEmpty() || stack2.peek() >= node) {
            stack2.push(node);
        } else {
            stack2.push(stack2.peek());
        }
    }

    public void pop() {
        stack1.pop();
        stack2.pop();
    }

    public int top() {
        return stack2.peek();
    }

    /**
     * O(1)获取栈中最小值
     * @return 最小值
     */
    public int min() {
        return stack2.peek();
    }
}
```

### 测试用例
1. 新压入栈的数字比之前的最小值大/小。
2. 弹出栈的数字是/不是最小元素。

================================================
FILE: docs/jianzhioffer/java/31_StackPushPopOrder.md
================================================
## 栈的压入、弹出序列

### 题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列`1,2,3,4,5`是某栈的压入顺序,序列`4,5,3,2,1`是该压栈序列对应的一个弹出序列,但`4,3,5,1,2`就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

### 解法
判断下一个要弹出的元素:
- 如果刚好是栈顶元素,直接弹出。
- 如果不在栈顶,则把压栈序列中还没有入栈的数字压入栈,直到待弹出的数字压入栈顶。
- 如果所有数字都压入栈顶后依然没有后找到下一个弹出的数字,则不可能是弹出序列。

```java
import java.util.Stack;

/**
 * @author bingo
 * @since 2018/11/22
 */


public class Solution {
    /**
     * 判断是否是弹出序列
     * @param pushA 压栈序列
     * @param popA 弹栈序列
     * @return 是否是弹出序列
     */
    public boolean IsPopOrder(int[] pushA,int[] popA) {
        if (pushA == null || popA == null || pushA.length != popA.length) {
            return false;
        }

        Stack<Integer> stack = new Stack<>();
        int i = 0;
        int n = pushA.length;
        boolean flag = false;
        for (int val : popA) {
            while (stack.isEmpty() || stack.peek() != val) {
                if (i >= n) {
                    flag = true;
                    break;
                }
                stack.push(pushA[i++]);
            }
            if (flag) {
                break;
            }
            stack.pop();
        }

        return stack.isEmpty();
    }
}
```

### 测试用例
1. 功能测试(输入的两个数组含有多个数字或者只有一个数字:第二个数组是/不是第一个数组表示的压入序列对应的栈的弹出序列);
2. 特殊输入测试(输入两个空指针)。

================================================
FILE: docs/jianzhioffer/java/32_01_PrintTreeFromTopToBottom.md
================================================
## 不分行从上到下打印二叉树

### 题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。

### 解法
先将根节点进入队列。

队头元素出队,将值存入 list,判断该元素是否有左/右子树,有的话依次进入队列中。队列为空时结束。

```java
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

/**
 * @author bingo
 * @since 2018/11/23
 */

/**
 public class TreeNode {
 int val = 0;
 TreeNode left = null;
 TreeNode right = null;

 public TreeNode(int val) {
 this.val = val;

 }

 }
 */
public class Solution {
    /**
     * 从上到下打印二叉树
     * @param root 二叉树根节点
     * @return 结果list
     */
    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<Integer> list = new ArrayList<>();
        if (root == null) {
            return list;
        }
        Queue<TreeNode> queue = new L
Download .txt
gitextract_q9u5mspj/

├── .gitignore
├── .nojekyll
├── 404.html
├── CNAME
├── Dockerfile
├── NAV.md
├── README.md
├── SUMMARY.md
├── asset/
│   ├── back-to-top.css
│   ├── back-to-top.js
│   ├── dark-mode.css
│   ├── dark-mode.js
│   ├── docsify-apachecn-footer.js
│   ├── docsify-baidu-push.js
│   ├── docsify-baidu-stat.js
│   ├── docsify-clicker.js
│   ├── docsify-cnzz.js
│   ├── docsify-quick-page.css
│   ├── docsify-quick-page.js
│   ├── edit.css
│   ├── edit.js
│   ├── prism-darcula.css
│   ├── share.css
│   ├── share.js
│   ├── style.css
│   └── vue.css
├── docs/
│   ├── jianzhioffer/
│   │   └── java/
│   │       ├── 03_01_DuplicationInArray.md
│   │       ├── 03_02_DuplicationInArrayNoEdit.md
│   │       ├── 04_FindInPartiallySortedMatrix.md
│   │       ├── 05_ReplaceSpaces.md
│   │       ├── 06_PrintListInReversedOrder.md
│   │       ├── 07_ConstructBinaryTree.md
│   │       ├── 08_NextNodeInBinaryTrees.md
│   │       ├── 09_01_QueueWithTwoStacks.md
│   │       ├── 09_02_StackWithTwoQueues.md
│   │       ├── 10_01_Fibonacci.md
│   │       ├── 10_02_JumpFloor.md
│   │       ├── 10_03_JumpFloorII.md
│   │       ├── 10_04_RectCover.md
│   │       ├── 11_MinNumberInRotatedArray.md
│   │       ├── 12_StringPathInMatrix.md
│   │       ├── 13_RobotMove.md
│   │       ├── 14_CuttingRope.md
│   │       ├── 15_NumberOf1InBinary.md
│   │       ├── 16_Power.md
│   │       ├── 17_Print1ToMaxOfNDigits.md
│   │       ├── 18_01_DeleteNodeInList.md
│   │       ├── 18_02_DeleteDuplicatedNode.md
│   │       ├── 19_RegularExpressionsMatching.md
│   │       ├── 20_NumericStrings.md
│   │       ├── 21_ReorderArray.md
│   │       ├── 22_KthNodeFromEnd.md
│   │       ├── 23_EntryNodeInListLoop.md
│   │       ├── 24_ReverseList.md
│   │       ├── 25_MergeSortedLists.md
│   │       ├── 26_SubstructureInTree.md
│   │       ├── 27_MirrorOfBinaryTree.md
│   │       ├── 28_SymmetricalBinaryTree.md
│   │       ├── 29_PrintMatrix.md
│   │       ├── 30_MinInStack.md
│   │       ├── 31_StackPushPopOrder.md
│   │       ├── 32_01_PrintTreeFromTopToBottom.md
│   │       ├── 32_02_PrintTreesInLines.md
│   │       ├── 32_03_PrintTreesInZigzag.md
│   │       ├── 33_SquenceOfBST.md
│   │       ├── 34_PathInTree.md
│   │       ├── 35_CopyComplexList.md
│   │       ├── 36_ConvertBinarySearchTree.md
│   │       ├── 37_SerializeBinaryTrees.md
│   │       ├── 38_StringPermutation.md
│   │       ├── 39_MoreThanHalfNumber.md
│   │       ├── 40_KLeastNumbers.md
│   │       ├── 41_StreamMedian.md
│   │       ├── 42_GreatestSumOfSubarrays.md
│   │       ├── 43_NumberOf1.md
│   │       ├── 44_DigitsInSequence.md
│   │       ├── 45_SortArrayForMinNumber.md
│   │       ├── 46_TranslateNumbersToStrings.md
│   │       ├── 47_MaxValueOfGifts.md
│   │       ├── 48_LongestSubstringWithoutDup.md
│   │       ├── 49_UglyNumber.md
│   │       ├── 50_01_FirstNotRepeatingChar.md
│   │       ├── 50_02_FristCharacterInStream.md
│   │       ├── 52_FirstCommonNodesInLists.md
│   │       ├── 53_01_NumberOfK.md
│   │       ├── 53_02_MissingNumber.md
│   │       ├── 53_03_IntegerIdenticalToIndex.md
│   │       ├── 54_KthNodeInBST.md
│   │       ├── 55_01_TreeDepth.md
│   │       ├── 55_02_BalancedBinaryTree.md
│   │       ├── 56_01_NumbersAppearOnce.md
│   │       ├── 56_02_NumberAppearingOnce.md
│   │       ├── 57_01_TwoNumbersWithSum.md
│   │       ├── 57_02_ContinuousSquenceWithSum.md
│   │       ├── 58_01_ReverseWordsInSentence.md
│   │       ├── 58_02_LeftRotateString.md
│   │       ├── 59_01_MaxInSlidingWindow.md
│   │       ├── 61_ContinousCards.md
│   │       ├── README.md
│   │       └── SUMMARY.md
│   ├── leetcode/
│   │   ├── cpp/
│   │   │   ├── 0001._Two_Sum.md
│   │   │   ├── 0002._Add_Two_Numbers.md
│   │   │   ├── 0003._Longest_Substring_Without_Repeating_Characters.md
│   │   │   ├── 0004._Median_of_Two_Sorted_Arrays.md
│   │   │   ├── 0005._Longest_Palindromic_Substring.md
│   │   │   ├── 0006._ZigZag_Conversion.md
│   │   │   ├── 0007._Reverse_Integer.md
│   │   │   ├── 0008._String_to_Integer_(atoi).md
│   │   │   ├── 0009._Palindrome_Number.md
│   │   │   ├── 0010._Regular_Expression_Matching.md
│   │   │   ├── 0011._Container_With_Most_Water.md
│   │   │   ├── 0012._Integer_to_Roman.md
│   │   │   ├── 0014._Longest_Common_Prefix.md
│   │   │   ├── 0015._3sum.md
│   │   │   ├── 0016._3Sum_Closest.md
│   │   │   ├── 0017._Letter_Combinations_of_a_Phone_Number.md
│   │   │   ├── 0018._4Sum.md
│   │   │   ├── 0019._Remove_Nth_Node_From_End_of_List.md
│   │   │   ├── 0020._Valid_Parentheses.md
│   │   │   ├── 0021._Merge_Two_Sorted_Lists.md
│   │   │   ├── 0022._Generate_Parentheses.md
│   │   │   ├── 0023._Merge_K_Sorted_Lists.md
│   │   │   ├── 0024._Swap_Nodes_in_Pairs.md
│   │   │   ├── 0025._Reverse_Nodes_In_K_Group.md
│   │   │   ├── 0026._Remove_Duplicates_From_Sorted_Array.md
│   │   │   ├── 0027._Remove_Element.md
│   │   │   ├── 0028._Implement_Strstr.md
│   │   │   ├── 0029._Divide_Two_Integers.md
│   │   │   ├── 0030._Substring_With_Concatenation_Of_All_Words.md
│   │   │   ├── 0031._Next_Permutatio.md
│   │   │   ├── 0032._Longest_Valid_Parentheses.md
│   │   │   ├── 0033._Search_in_Rotated_Sorted_Array.md
│   │   │   ├── 0034._Find_First_and_Last_Position_of_Element_in_Sorted_Array.md
│   │   │   ├── 0035._Search_Insert_Position.md
│   │   │   ├── 0036._Valid_Sudoku.md
│   │   │   ├── 0038._Count_and_Say.md
│   │   │   ├── 0039._Combination_Sum.md
│   │   │   ├── 0040._Combination_Sum_II.md
│   │   │   ├── 0041._First_Missing_Positive.md
│   │   │   ├── 0042._Trapping_Rain_Water.md
│   │   │   ├── 0043._Multiply_Strings.md
│   │   │   ├── 0044._Wildcard_Matching.md
│   │   │   ├── 0045._Jump_Game_II.md
│   │   │   ├── 0046._Permutations.md
│   │   │   ├── 0047._Permutations_II.md
│   │   │   ├── 0048._Rotate_Image.md
│   │   │   ├── 0049._Group_Anagrams.md
│   │   │   ├── 0050._powx_n.md
│   │   │   ├── 0051._N-Queens.md
│   │   │   ├── 0052._N-Queens_II.md
│   │   │   ├── 0053._Maximum_Subarray.md
│   │   │   ├── 0054._Spiral_Matrix.md
│   │   │   ├── 0055._Jump_Game.md
│   │   │   ├── 0056._Merge_Intervals.md
│   │   │   ├── 0057._Insert_Interval.md
│   │   │   ├── 0058._Length_of_Last_Word.md
│   │   │   ├── 0059._Spiral_Matrix_II.md
│   │   │   ├── 0060._Permutation_Sequence.md
│   │   │   ├── 0061._Rotate_List.md
│   │   │   ├── 0062._Unique_Paths.md
│   │   │   ├── 0063._Unique_Paths_II.md
│   │   │   ├── 0064._Minimum_Path_Sum.md
│   │   │   ├── 0065._Valid_Number.md
│   │   │   ├── 0066._Plus_One.md
│   │   │   ├── 0068._Text_Justification.md
│   │   │   ├── 0069._Sqr(x).md
│   │   │   ├── 0072._Edit_Distance.md
│   │   │   ├── 0075._Sort_Colors.md
│   │   │   ├── 0076._Minimum_Window_Substring.md
│   │   │   ├── 0077._combinations.md
│   │   │   ├── 0078._subsets.md
│   │   │   ├── 0081._Search_in_Rotated_Sorted_Array_II.md
│   │   │   ├── 0083._Remove_Duplicates_From_Sorted_Lists.md
│   │   │   ├── 0084._Largest_Rectangle_in_Histogram.md
│   │   │   ├── 0085._Maximal_Rectangle.md
│   │   │   ├── 0087._Scramble_String.md
│   │   │   ├── 0088._Merge_Sorted_Array.md
│   │   │   ├── 0090._Subsets_II.md
│   │   │   ├── 0094._binary_tree_inorder_traversal.md
│   │   │   ├── 0096._Unique_Binary_Search_Trees.md
│   │   │   ├── 0097._Interleaving_String.md
│   │   │   ├── 0099._Recover_Binary_Search_Tree.md
│   │   │   ├── 0100._same_tree.md
│   │   │   ├── 0101._Symmetric_Tree.md
│   │   │   ├── 0102._Binary_Tree_Level_Order_Traversal.md
│   │   │   ├── 0104._Maximum_Depth_of_Binary_Tree.md
│   │   │   ├── 0105._Construct_Binary_Tree_from_Preorder_and_Inorder_Traversal.md
│   │   │   ├── 0106._Construct_Binary_Tree_from_Inorder_and_Postorder_Traversal.md
│   │   │   ├── 0107._Binary_Tree_Level_Order_Traversal_II.md
│   │   │   ├── 0108._Convert_Sorted_Array_to_Binary_Search_Tree.md
│   │   │   ├── 0109._Convert_Sorted_List_to_Binary_Search_Tree.md
│   │   │   ├── 0110._Balanced_Binary_Tree.md
│   │   │   ├── 0111._Minimum_Depth_Of_Binary_Tree.md
│   │   │   ├── 0112._Path_Sum.md
│   │   │   ├── 0114._Flatten_Binary_Tree_to_Linked_List.md
│   │   │   ├── 0115._Distinct_Subsequences.md
│   │   │   ├── 0118._Pascals_Triangle.md
│   │   │   ├── 0119._Pascals_Triangle-II.md
│   │   │   ├── 0120._Triangle.md
│   │   │   ├── 0121._Best_Tim_to_Buy_and_Sell_Stock.md
│   │   │   ├── 0122._Best_Time_to_Buy_and_Sell_Stock_II.md
│   │   │   ├── 0123._Best_Time_to_Buy_and_Sell_Stock_III.md
│   │   │   ├── 0124._Binary_Tree_Maximum_Path_Sum.md
│   │   │   ├── 0127._Word_Ladde.md
│   │   │   ├── 0128._Longest_Consecutive_Sequence.md
│   │   │   ├── 0129._Sum_Root_to_Leaf_Numbers.md
│   │   │   ├── 0131._Palindrome_Partitioning.md
│   │   │   ├── 0136._Single_Numbe.md
│   │   │   ├── 0137._Single_Number_II.md
│   │   │   ├── 0141._Linked_List_Cycle.md
│   │   │   ├── 0142._Linked_List_Cycle_II.md
│   │   │   ├── 0144._Binary_Tree_Preorder_Traversal.md
│   │   │   ├── 0145._Binary_Tree_Postorder_Traversal.md
│   │   │   ├── 0147._Insert_on_Sort_List.md
│   │   │   ├── 0148._Sort_list.md
│   │   │   ├── 0151._Reverse_Words_in_a_String.md
│   │   │   ├── 0153._Find_Minimum_in_Rotated_Sorted_Array.md
│   │   │   ├── 0154._Find_Minimum_in_Rotated_Sorted_Array-II.md
│   │   │   ├── 0160._Intersection_Of_Two_Linked_Lists.md
│   │   │   ├── 0164._Maximum_Gap.md
│   │   │   ├── 0166._Fraction_to_Recurring_Decimal.md
│   │   │   ├── 0167._Two_Sum_II-Input_array_is_sorted.md
│   │   │   ├── 0199._Binary_Tree_Right_Side_View.md
│   │   │   ├── 0216._Combination_Sum_III.md
│   │   │   ├── 0230._Kth_Smallest_Element_in_a_BST.md
│   │   │   ├── 0260._Single_Number_III.md
│   │   │   ├── 0287._Find_the_Duplicate_Number.md
│   │   │   ├── 0326._Power_Of_Three.md
│   │   │   ├── 0328._Odd_Even_Linked_List.md
│   │   │   ├── 0329._Longest_Increasing_Path_in_a_Matrix.md
│   │   │   ├── 0338._Counting_Bits.md
│   │   │   ├── 0413._Arithmetic_Slices.md
│   │   │   ├── 0442._Find_All_Duplicates_in_an_Array.md
│   │   │   ├── 0513._Find_Bottom_Left_Tree_Value.md
│   │   │   ├── 0515._Find_Largest_Value_in_Each_Tree_Row.md
│   │   │   ├── 0540._Single_Element_in_a_Sorted_Array.md
│   │   │   ├── 0581._Shortest_Unsorted_Continuous_Subarray.md
│   │   │   ├── 0629._K_Inverse_Pairs_Array.md
│   │   │   ├── 0632._Smallest_Range.md
│   │   │   ├── 0654._maximum_binary_tree.md
│   │   │   ├── 0668._Kth_Smallest_Number_in_Multiplication_Table.md
│   │   │   ├── 0701._Insert_into_a_Binary_Search_Tree.md
│   │   │   ├── 0715._Range_Module.md
│   │   │   ├── 0719._Find_K-th_Smallest_Pair_Distance.md
│   │   │   ├── 0739._Daily_Temperatures.md
│   │   │   ├── 0797._All_Paths_From_Source_To_Target.md
│   │   │   ├── 0814._Binary_Tree_Pruning.md
│   │   │   ├── 0841._Keys_and_Rooms.md
│   │   │   ├── 0877._Stone_Game.md
│   │   │   ├── 0945._Minimum_Increment_to_Make_Array_Unique.md
│   │   │   ├── 0946._Validate_Stack_Sequences.md
│   │   │   ├── 0947._Most_Stones_Removed_with_Same_Row_or_Column.md
│   │   │   ├── 0948._Bag_of_Tokens.md
│   │   │   ├── 0949._Largest_Time_for_Given_Digits.md
│   │   │   ├── 0950._Reveal_Cards_In_Increasing_Order.md
│   │   │   ├── 0951._Flip_Equivalent_Binary_Trees.md
│   │   │   ├── 0952._Largest_Component_Size_by_Common_Factor.md
│   │   │   ├── README.md
│   │   │   └── SUMMARY.md
│   │   ├── java/
│   │   │   ├── 0001._Two_Sum.md
│   │   │   ├── 0002._add_two_numbers.md
│   │   │   ├── 0003._Longest_Substring_Without_Repeating_Characters.md
│   │   │   ├── 0004._Median_of_Two_Sorted_Arrays.md
│   │   │   ├── 0005._Longest_Palindromic_Substring.md
│   │   │   ├── 0006._ZigZag_Conversion.md
│   │   │   ├── 0007._Reverse_Integer.md
│   │   │   ├── 0023._Merge_K_Sorted_Lists.md
│   │   │   ├── 0141._linked_list_cycle.md
│   │   │   ├── 0218._The_Skyline_Problem.md
│   │   │   ├── 0238._product_of_array_except_self.md
│   │   │   ├── 0342._Power_of_Four.md
│   │   │   ├── 0403._Frog_Jump.md
│   │   │   ├── 0757._Set_Intersection_Size_At_Least_Two.md
│   │   │   ├── 0768._Max_Chunks_To_Make_Sorted_II.md
│   │   │   ├── 0780._Reaching_Points.md
│   │   │   ├── 0793._Preimage_Size_of_Factorial_Zeroes_Function.md
│   │   │   ├── 0827._Making_A_Large_Island.md
│   │   │   ├── 0828._Unique_Letter_String.md
│   │   │   ├── 0834._Sum_of_Distances_in_Tree.md
│   │   │   ├── 0843._Guess_the_Word.md
│   │   │   ├── 0847._Shortest_Path_Visiting_All_Nodes.md
│   │   │   ├── 0850._Rectangle_Area_II.md
│   │   │   ├── 0854._K-Similar_Strings.md
│   │   │   ├── 0857._Minimum_Cost_to_Hire_K_Workers.md
│   │   │   ├── 0862._Shortest_Subarray_with_Sum_at_Least_K.md
│   │   │   ├── 0864._Shortest_Path_to_Get_All_Keys.md
│   │   │   ├── 0871._Minimum_Number_of_Refueling_Stops.md
│   │   │   ├── 0878._Nth_Magical_Number.md
│   │   │   ├── 0879._Profitable_Schemes.md
│   │   │   ├── 0882._Reachable_Nodes_In_Subdivided_Graph.md
│   │   │   ├── 0887._Super_Egg_Drop.md
│   │   │   ├── 0891._Sum_of_Subsequence_Widths.md
│   │   │   ├── 0895._Maximum_Frequency_Stack.md
│   │   │   ├── 0899._Orderly_Queue.md
│   │   │   ├── 0902._Numbers_At_Most_N_Given_Digit_Set.md
│   │   │   ├── 0903._Valid_Permutations_for_DI_Sequence.md
│   │   │   ├── 0906._Super_Palindromes.md
│   │   │   ├── 0913._Cat_and_Mouse.md
│   │   │   ├── 0920._Number_of_Music_Playlists.md
│   │   │   ├── README.md
│   │   │   └── SUMMARY.md
│   │   ├── javascript/
│   │   │   ├── 0001._Two_Sum.md
│   │   │   ├── 0002._Add_Two_Numbers.md
│   │   │   ├── 0003._Longest_Substring_without_Repeating_Characters.md
│   │   │   ├── 0005._Longest_Palindromic_Substring.md
│   │   │   ├── 0007._Reverse_Integer.md
│   │   │   ├── 0008._String_to_Integer.md
│   │   │   ├── 0009._Palindrome_Number.md
│   │   │   ├── 0011._Container_With_Most_Water.md
│   │   │   ├── 0012._Integer_To_Roman.md
│   │   │   ├── 0013._Roman_To_Integer.md
│   │   │   ├── 0014._Longest_Common_Prefix.md
│   │   │   ├── 0015._Three_Sum.md
│   │   │   ├── 0016._3_Sum_Closest.md
│   │   │   ├── 0017._Letter_Combinations_Of_A_Phone_Number.md
│   │   │   ├── 0019._Remove_Nth_Node_From_End_Of_List.md
│   │   │   ├── 0020._Valid_Parentheses.md
│   │   │   ├── 0021._Merge_Two_Sorted_Lists.md
│   │   │   ├── 0022._Generate_Parentheses.md
│   │   │   ├── 0024._Swap_Nodes_In_Pairs.md
│   │   │   ├── 0027._Remove_Element.md
│   │   │   ├── 0031._Next_Permutation.md
│   │   │   ├── 0035._Search_Insert_Position.md
│   │   │   ├── 0053._Maximum_Subarray.md
│   │   │   ├── 0054._Spiral_Matrix.md
│   │   │   ├── 0055._Jump_Game.md
│   │   │   ├── 0056._Merge_Intervals.md
│   │   │   ├── 0058._Length_of_Last_Word.md
│   │   │   ├── 0061._Rotate_List.md
│   │   │   ├── 0062._Unique_Paths.md
│   │   │   ├── 0064._Minimum_Path_Sum.md
│   │   │   ├── 0066._Plus_One.md
│   │   │   ├── 0067._Add_Binary.md
│   │   │   ├── 0074._Search_a_2D_Matrix.md
│   │   │   ├── 0077._Combinations.md
│   │   │   ├── 0079._Search_Word.md
│   │   │   ├── 0083._Remove_Duplicates_From_Sorted_List.md
│   │   │   ├── 0094._Binary_Tree_Inorder_Traversal.md
│   │   │   ├── 0098._Validate_Binary_Search_Tree.md
│   │   │   ├── 0100._Same_Tree.md
│   │   │   ├── 0101._Symmetric_Tree.md
│   │   │   ├── 0104._Maximum_Depth_of_Binary_Tree.md
│   │   │   ├── 0106._Construct_Binary_Tree_From_Inorder_And_Postorder_Traversal.md
│   │   │   ├── 0120._Triangle.md
│   │   │   ├── 0121._Best_Time_To_Buy_And_Sell_Stock.md
│   │   │   ├── 0141._Linked_List_Cycle.md
│   │   │   ├── 0146._LRU_Cache.md
│   │   │   ├── 0167._Two_Sum_II_-_Input_array_is_sorted.md
│   │   │   ├── 0167._Two_Sum_II_Input_Array_is_Sorted.md
│   │   │   ├── 0171._Excel_Sheet_Column_Number.md
│   │   │   ├── 0179._Largest_Number.md
│   │   │   ├── 0198._House_Robber.md
│   │   │   ├── 0203._Remove_Linked_List_Elements.md
│   │   │   ├── 0206._Reverse_Linked_List.md
│   │   │   ├── 0209._Minimum_Size_Subarray_Sum.md
│   │   │   ├── 0258._Add_Digits.md
│   │   │   ├── 0320._Coin_Change.md
│   │   │   ├── 0347._Top_K_Frequent_Elements.md
│   │   │   ├── 0402._Remove_K_Digits.md
│   │   │   ├── 0406._Queue_Reconstruction_By_Height.md
│   │   │   ├── 0485._Max_Consecutive_Ones.md
│   │   │   ├── 0539._Minimum_Time_Difference.md
│   │   │   ├── 0581._Shortest_Unsorted_Continuous_Subarray.md
│   │   │   ├── 0881._Boats_to_Save_People.md
│   │   │   ├── 0997._Find_The_Town_Judge.md
│   │   │   ├── 1025._Divisor_Game.md
│   │   │   ├── 1130._Minimum_Cost_Tree_From_Leaf_Values.md
│   │   │   ├── 303._Range_Sum_Query_Immutable.md
│   │   │   ├── README.md
│   │   │   ├── SUMMARY.md
│   │   │   └── book.json
│   │   └── python/
│   │       ├── 001._two_sum.md
│   │       ├── 002._add_two_numbers.md
│   │       ├── 003._longest_substring_without_repeating_characters.md
│   │       ├── 004._median_of_two_sorted_arrays.md
│   │       ├── 005._longest_palindromic_substring.md
│   │       ├── 006._ZigZag_Conversion.md
│   │       ├── 007._Reverse_Integer.md
│   │       ├── 008._string_to_integer_(atoi).md
│   │       ├── 009._Palindrome_Number.md
│   │       ├── 010._regular_expression_matching.md
│   │       ├── 011._container_with_most_water.md
│   │       ├── 012._Integer_to_Roman.md
│   │       ├── 013._Roman_to_Integer.md
│   │       ├── 014._longest_common_prefix.md
│   │       ├── 015._3sum.md
│   │       ├── 016._3sum_closest.md
│   │       ├── 017._letter_combinations_of_a_phone_number.md
│   │       ├── 018._4sum.md
│   │       ├── 019._remove_nth_node_from_end_of_list.md
│   │       ├── 020._valid_parentheses.md
│   │       ├── 021._merge_two_sorted_lists.md
│   │       ├── 022._generate_parentheses.md
│   │       ├── 023._merge_k_sorted_lists.md
│   │       ├── 024._swap_nodes_in_pairs.md
│   │       ├── 026._Remove_Duplicates_from_Sorted_Array.md
│   │       ├── 027._Remove_Element.md
│   │       ├── 028._implement_strstr.md
│   │       ├── 030._Substring_with_Concatenation_of_All_Words.md
│   │       ├── 031._next_permutation.md
│   │       ├── 032._longest_valid_parentheses.md
│   │       ├── 033._search_in_rotated_sorted_array.md
│   │       ├── 034._Search_for_a_Range.md
│   │       ├── 035._search_insert_position.md
│   │       ├── 038._Count_and_Say.md
│   │       ├── 039._combination_sum.md
│   │       ├── 040._combination_sum_ii.md
│   │       ├── 041._First_Missing_Positive.md
│   │       ├── 042._trapping_rain_water.md
│   │       ├── 043._multiply_strings.md
│   │       ├── 044._wildcard_matching.md
│   │       ├── 045._Jump_Game_II.md
│   │       ├── 046._permutations.md
│   │       ├── 047._permutations_ii.md
│   │       ├── 048._rotate_image.md
│   │       ├── 049._group_anagrams_python.md
│   │       ├── 050._pow(x,_n).md
│   │       ├── 051._n-queens.md
│   │       ├── 052._n-queens_ii.md
│   │       ├── 053._maximum_subarray.md
│   │       ├── 054._spiral_matrix.md
│   │       ├── 055._jump_game.md
│   │       ├── 056._Merge_Intervals.md
│   │       ├── 058._length_of_last_word.md
│   │       ├── 059._spiral_matrix_ii.md
│   │       ├── 060._permutation_sequence.md
│   │       ├── 061._rotate_list.md
│   │       ├── 062._unique_paths.md
│   │       ├── 064._minimum_path_sum.md
│   │       ├── 065.unique_paths_ii.md
│   │       ├── 066._plus_one.md
│   │       ├── 067._add_binary.md
│   │       ├── 069._sqrt(x).md
│   │       ├── 070._Climbing_Stairs.md
│   │       ├── 072._edit_distance.md
│   │       ├── 073._Set_Matrix_Zeroes.md
│   │       ├── 074._search_a_2d_matrix.md
│   │       ├── 075._sort_colors.md
│   │       ├── 076._Minimum_Window_Substring.md
│   │       ├── 077._combinations.md
│   │       ├── 078._Subsets.md
│   │       ├── 079._word_search.md
│   │       ├── 082._remove_duplicates_from_sorted_list_ii.md
│   │       ├── 083._remove_duplicates_from_sorted_list.md
│   │       ├── 086._partition_list.md
│   │       ├── 088._merge_sorted_array.md
│   │       ├── 089._gray_code.md
│   │       ├── 090._subsets_ii.md
│   │       ├── 091._decode_ways.md
│   │       ├── 092._reverse_linked_list_ii.md
│   │       ├── 093._restore_ip_addresses.md
│   │       ├── 094._binary_tree_inorder_traversal.md
│   │       ├── 096._unique_binary_search_trees.md
│   │       ├── 098._validate_binary_search_tree.md
│   │       ├── 100._same_tree.md
│   │       ├── 101._symmetric_tree.md
│   │       ├── 102._binary_tree_level_order_traversal.md
│   │       ├── 103._binary_tree_zigzag_level_order_traversal.md
│   │       ├── 104._maximum_depth_of_binary_tree.md
│   │       ├── 105._construct_binary_tree_from_preorder_and_inorder_traversal.md
│   │       ├── 106._construct_binary_tree_from_inorder_and_postorder_traversal.md
│   │       ├── 107._binary_tree_level_order_traversal_ii.md
│   │       ├── 108._convert_sorted_array_to_binary_search_tree.md
│   │       ├── 109._convert_sorted_list_to_binary_search_tree.md
│   │       ├── 110._balanced_binary_tree.md
│   │       ├── 111._minimum_depth_of_binary_tree.md
│   │       ├── 112._path_sum.md
│   │       ├── 113._path_sum_ii.md
│   │       ├── 114._flatten_binary_tree_to_linked_list.md
│   │       ├── 116._populating_next_right_pointers_in_each_node.md
│   │       ├── 117._Populating_Next_Right_Pointers_in_Each_Node_II.md
│   │       ├── 118._pascal's_triangle.md
│   │       ├── 119._Pascal's_Triangle_II.md
│   │       ├── 120._Triangle.md
│   │       ├── 121._Best_Time_to_Buy_and_Sell_Stock.md
│   │       ├── 124._Binary_Tree_Maximum_Path_Sum.md
│   │       ├── 125._valid_palindrome.md
│   │       ├── 126._Word_Ladder_II.md
│   │       ├── 127._word_ladder.md
│   │       ├── 128._Longest_Consecutive_Sequence.md
│   │       ├── 129._sum_root_to_leaf_numbers.md
│   │       ├── 130._surrounded_regions.md
│   │       ├── 131._palindrome_partitioning.md
│   │       ├── 133._clone_graph.md
│   │       ├── 136._single_number.md
│   │       ├── 139._word_break.md
│   │       ├── 140._word_break_ii.md
│   │       ├── 141._linked_list_cycle.md
│   │       ├── 142_Linked_List_Cycle_II.md
│   │       ├── 143._reorder_list.md
│   │       ├── 144._binary_tree_preorder_traversal.md
│   │       ├── 145._binary_tree_postorder_traversal.md
│   │       ├── 147._insertion_sort_list.md
│   │       ├── 148._sort_list.md
│   │       ├── 150._evaluate_reverse_polish_notation.md
│   │       ├── 151._reverse_words_in_a_string.md
│   │       ├── 152._maximum_product_subarray.md
│   │       ├── 153._find_minimum_in_rotated_sorted_array.md
│   │       ├── 155._min_stack.md
│   │       ├── 157._Read_N_Characters_Given_Read4.md
│   │       ├── 158._Read_N_Characters_Given_Read4_II_-_Call_multiple_times.md
│   │       ├── 159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md
│   │       ├── 160._intersection_of_two_linked_lists.md
│   │       ├── 162._find_peak_element.md
│   │       ├── 165._compare_version_numbers.md
│   │       ├── 166._Fraction_to_Recurring_Decimal.md
│   │       ├── 167._two_sum_ii_-_input_array_is_sorted.md
│   │       ├── 168._excel_sheet_column_title.md
│   │       ├── 169._majority_element.md
│   │       ├── 171._excel_sheet_column_number.md
│   │       ├── 173._binary_search_tree_iterator.md
│   │       ├── 179._Largest_Number.md
│   │       ├── 182._duplicate_emails.md
│   │       ├── 189._rotate_array.md
│   │       ├── 191._number_of_1_bits.md
│   │       ├── 198._house_robber.md
│   │       ├── 199._binary_tree_right_side_view.md
│   │       ├── 200._number_of_islands.md
│   │       ├── 203._remove_linked_list_elements.md
│   │       ├── 204._count_primes.md
│   │       ├── 205._isomorphic_strings.md
│   │       ├── 206._reverse_linked_list.md
│   │       ├── 207._course_schedule.md
│   │       ├── 208._implement_trie_(prefix_tree).md
│   │       ├── 210._course_schedule_ii.md
│   │       ├── 211._Add_and_Search_Word_-_Data_structure_design.md
│   │       ├── 213._house_robber_ii.md
│   │       ├── 216._combination_sum_iii.md
│   │       ├── 217._contains_duplicate.md
│   │       ├── 218._The_Skyline_Problem.md
│   │       ├── 219._contains_duplicate_ii.md
│   │       ├── 221._maximal_square.md
│   │       ├── 222._count_complete_tree_nodes.md
│   │       ├── 223._rectangle_area.md
│   │       ├── 224._Basic_Calculator.md
│   │       ├── 225._implement_stack_using_queues.md
│   │       ├── 226._invert_binary_tree.md
│   │       ├── 227._basic_calculator_ii.md
│   │       ├── 228._summary_ranges.md
│   │       ├── 229._majority_element_ii.md
│   │       ├── 230._kth_smallest_element_in_a_bst.md
│   │       ├── 231._Power_of_Two.md
│   │       ├── 232._implement_queue_using_stacks.md
│   │       ├── 234._palindrome_linked_list.md
│   │       ├── 235._lowest_common_ancestor_of_a_binary_search_tree.md
│   │       ├── 236._lowest_common_ancestor_of_a_binary_tree.md
│   │       ├── 237._delete_node_in_a_linked_list.md
│   │       ├── 238._product_of_array_except_self.md
│   │       ├── 240._search_a_2d_matrix_ii.md
│   │       ├── 242._valid_anagram.md
│   │       ├── 249._Group_Shifted_Strings.md
│   │       ├── 252._Meeting_Rooms.md
│   │       ├── 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md
│   │       ├── 256._Paint_House.md
│   │       ├── 257._binary_tree_paths.md
│   │       ├── 258._Add_Digits.md
│   │       ├── 261._Graph_Valid_Tree.md
│   │       ├── 263._ugly_number.md
│   │       ├── 264._ugly_number_ii.md
│   │       ├── 265._Paint_House_II.md
│   │       ├── 266._Palindrome_Permutation.md
│   │       ├── 267._Palindrome_Permutation_II.md
│   │       ├── 268._missing_number.md
│   │       ├── 270._Closest_Binary_Search_Tree_Value.md
│   │       ├── 276._Paint_Fence.md
│   │       ├── 277._Find_the_Celebrity.md
│   │       ├── 278._First_Bad_Version.md
│   │       ├── 279._perfect_squares.md
│   │       ├── 280._Wiggle_Sort.md
│   │       ├── 283._move_zeroes.md
│   │       ├── 285._inorder_successor_in_bst.md
│   │       ├── 286._Walls_and_Gates.md
│   │       ├── 287._Find_the_Duplicate_Number.md
│   │       ├── 289._game_of_life.md
│   │       ├── 290._word_pattern.md
│   │       ├── 292._nim_game.md
│   │       ├── 293._Flip_Game.md
│   │       ├── 296._Best_Meeting_Point.md
│   │       ├── 298._Binary_Tree_Longest_Consecutive_Sequence.md
│   │       ├── 299._bulls_and_cows.md
│   │       ├── 300._longest_increasing_subsequence.md
│   │       ├── 303._range_sum_query_-_immutable.md
│   │       ├── 316._Remove_Duplicate_Letters.md
│   │       ├── 319._Bulb_Switcher.md
│   │       ├── 322._Coin_Change.md
│   │       ├── 323._number_of_connected_components_in_an_undirected_graph.md
│   │       ├── 324._Wiggle_Sort_II.md
│   │       ├── 326._power_of_three.md
│   │       ├── 328._odd_even_linked_list.md
│   │       ├── 334._increasing_triplet_subsequence.md
│   │       ├── 337._house_robber_iii.md
│   │       ├── 338._Counting_Bits.md
│   │       ├── 339._Nested_List_Weight_Sum.md
│   │       ├── 341._Flatten_Nested_List_Iterator.md
│   │       ├── 342._Power_of_Four.md
│   │       ├── 344._reverse_string.md
│   │       ├── 345._Reverse_Vowels_of_a_String.md
│   │       ├── 349._intersection_of_two_arrays.md
│   │       ├── 350._intersection_of_two_arrays_ii.md
│   │       ├── 353._Design_Snake_Game.md
│   │       ├── 361._Bomb_Enemy.md
│   │       ├── 364._Nested_List_Weight_Sum_II.md
│   │       ├── 366._Find_Leaves_of_Binary_Tree.md
│   │       ├── 367._valid_perfect_square.md
│   │       ├── 369._Plus_One_Linked_List.md
│   │       ├── 371._sum_of_two_integers.md
│   │       ├── 374._Guess_Number_Higher_or_Lower.md
│   │       ├── 377._combination_sum_iv.md
│   │       ├── 378._kth_smallest_element_in_a_sorted_matrix.md
│   │       ├── 380._Insert_Delete_GetRandom_O(1).md
│   │       ├── 381._Insert_Delete_GetRandom_O(1)_-_Duplicates_allowed.md
│   │       ├── 382._linked_list_random_node.md
│   │       ├── 383._ransom_note.md
│   │       ├── 384._Shuffle_an_Array.md
│   │       ├── 386._Lexicographical_Numbers.md
│   │       ├── 387._first_unique_character_in_a_string.md
│   │       ├── 388._Longest_Absolute_File_Path.md
│   │       ├── 389._find_the_difference.md
│   │       ├── 392._is_subsequence.md
│   │       ├── 394._decode_string.md
│   │       ├── 400._Nth_Digit.md
│   │       ├── 401._binary_watch.md
│   │       ├── 404._sum_of_left_leaves.md
│   │       ├── 405._Convert_a_Number_to_Hexadecimal.md
│   │       ├── 406._Queue_Reconstruction_by_Height.md
│   │       ├── 412._fizz_buzz.md
│   │       ├── 413._Arithmetic_Slices.md
│   │       ├── 414._third_maximum_number.md
│   │       ├── 415._add_strings.md
│   │       ├── 416._Partition_Equal_Subset_Sum.md
│   │       ├── 421._Maximum_XOR_of_Two_Numbers_in_an_Array.md
│   │       ├── 422._Valid_Word_Square.md
│   │       ├── 434._number_of_segments_in_a_string.md
│   │       ├── 435._Non-overlapping_Intervals.md
│   │       ├── 437._path_sum_iii.md
│   │       ├── 438._Find_All_Anagrams_in_a_String.md
│   │       ├── 439._Ternary_Expression_Parser.md
│   │       ├── 441._arranging_coins.md
│   │       ├── 448._Find_All_Numbers_Disappeared_in_an_Array.md
│   │       ├── 450._Delete_Node_in_a_BST.md
│   │       ├── 453._Minimum_Moves_to_Equal_Array_Elements.md
│   │       ├── 459._Repeated_Substring_Pattern.md
│   │       ├── 461._Hamming_Distance.md
│   │       ├── 463._Island_Perimeter.md
│   │       ├── 467._Unique_Substrings_in_Wraparound_String.md
│   │       ├── 469._Convex_Polygon.md
│   │       ├── 476._Number_Complement.md
│   │       ├── 477._Total_Hamming_Distance.md
│   │       ├── 485._Max_Consecutive_Ones.md
│   │       ├── 494._Target_Sum.md
│   │       ├── 536._Construct_Binary_Tree_from_String.md
│   │       ├── 587._Erect_the_Fence.md
│   │       ├── 599._Minimum_Index_Sum_of_Two_Lists.md
│   │       ├── 606._Construct_String_from_Binary_Tree.md
│   │       ├── 611._Valid_Triangle_Number.md
│   │       ├── 646._Maximum_Length_of_Pair_Chain.md
│   │       ├── 647._Palindromic_Substrings.md
│   │       ├── 657._Judge_Route_Circle.md
│   │       ├── 665._Non-decreasing_Array.md
│   │       ├── 672._Bulb_Switcher_II.md
│   │       ├── 681._Next_Closest_Time.md
│   │       ├── 682._Baseball_Game.md
│   │       ├── 685._Redundant_Connection_II.md
│   │       ├── 687._Longest_Univalue_Path.md
│   │       ├── 693._Binary_Number_with_Alternating_Bits.md
│   │       ├── 701._Insert_into_a_Binary_Search_Tree.md
│   │       ├── 707._Design_Linked_List.md
│   │       ├── 740._delete_and_earn.md
│   │       ├── 760._Find_Anagram_Mappings.md
│   │       ├── 774._Minimize_Max_Distance_to_Gas_Station.md
│   │       ├── 777._Swap_Adjacent_in_LR_String.md
│   │       ├── 844._Backspace_String_Compare.md
│   │       ├── README.md
│   │       └── SUMMARY.md
│   └── think-dast-zh/
│       ├── 0.md
│       ├── 1.md
│       ├── 10.md
│       ├── 11.md
│       ├── 12.md
│       ├── 13.md
│       ├── 14.md
│       ├── 15.md
│       ├── 16.md
│       ├── 17.md
│       ├── 2.md
│       ├── 3.md
│       ├── 4.md
│       ├── 5.md
│       ├── 6.md
│       ├── 7.md
│       ├── 8.md
│       ├── 9.md
│       ├── README.md
│       └── SUMMARY.md
├── index.html
└── update.sh
Download .txt
SYMBOL INDEX (10 symbols across 1 files)

FILE: asset/share.js
  function r (line 23) | function r(e,t){if(e instanceof Array){for(var n=0,r=e.length;n<r;n++)if...
  function i (line 23) | function i(e,t){this.svnMod="",this.name=null,this.path=e,this.fn=null,t...
  function o (line 23) | function o(e,t){var n=t=="css",r=document.createElement(n?"link":"script...
  function u (line 23) | function u(t,n,r,i){function c(){c.isCalled||(c.isCalled=!0,clearTimeout...
  function a (line 23) | function a(e,t){e.onload=e.onerror=e.onreadystatechange=function(){if(/l...
  function f (line 23) | function f(e,t){e.attachEvent?e.attachEvent("onload",t):setTimeout(funct...
  function l (line 23) | function l(e,t){if(t&&t.isCalled)return;var n,r=navigator.userAgent,i=~r...
  function n (line 23) | function n(e,t,n){var r=new e(n);r.setView(new t(n)),r.init(),n&&n._hand...
  function r (line 23) | function r(e,r){window._bd_share_main.F.use(e,function(e,i){t.isArray(r)...
  function i (line 23) | function i(e){var n=e.common||window._bd_share_config&&_bd_share_config....
Condensed preview — 696 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,408K chars).
[
  {
    "path": ".gitignore",
    "chars": 1254,
    "preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packagi"
  },
  {
    "path": ".nojekyll",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "404.html",
    "chars": 74,
    "preview": "---\npermalink: /404.html\n---\n<script>window.location.href = '/';</script>\n"
  },
  {
    "path": "CNAME",
    "chars": 17,
    "preview": "algo.apachecn.org"
  },
  {
    "path": "Dockerfile",
    "chars": 49,
    "preview": "FROM httpd:2.4\nCOPY ./ /usr/local/apache2/htdocs/"
  },
  {
    "path": "NAV.md",
    "chars": 14401,
    "preview": "+   编程\n    +   [JavaTPoint 编程语言中文教程📚](https://apachecn.github.io/javatpoint-prog-zh)\n    +   [JavaTPoint .NET 中文教程📚](htt"
  },
  {
    "path": "README.md",
    "chars": 1549,
    "preview": "# ApacheCN 数据结构与算法译文集\n\n> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)\n> \n> 程序员的双手是魔术师的双手,他们把枯"
  },
  {
    "path": "SUMMARY.md",
    "chars": 55399,
    "preview": "+   [数据结构思维中文版](docs/think-dast-zh/README.md)\n    +   [前言](docs/think-dast-zh/0.md)\n    +   [第一章 接口](docs/think-dast-zh/"
  },
  {
    "path": "asset/back-to-top.css",
    "chars": 421,
    "preview": "#scroll-btn {\n    position: fixed;\n    right: 15px;\n    bottom: 10px;\n    width: 35px;\n    height: 35px;\n    background-"
  },
  {
    "path": "asset/back-to-top.js",
    "chars": 611,
    "preview": "document.addEventListener('DOMContentLoaded', function() {\n\tvar scrollBtn = document.createElement('div')\n\tscrollBtn.id "
  },
  {
    "path": "asset/dark-mode.css",
    "chars": 422,
    "preview": "#dark-mode-btn {\n\tposition: fixed;\n\tright: 15px;\n\ttop: 100px;\n\twidth: 35px;\n\theight: 35px;\n\tbackground-repeat: no-repeat"
  },
  {
    "path": "asset/dark-mode.js",
    "chars": 1056,
    "preview": "document.addEventListener('DOMContentLoaded', function() {\n\tvar style = document.querySelector('#invert')\n\tif (style == "
  },
  {
    "path": "asset/docsify-apachecn-footer.js",
    "chars": 1858,
    "preview": "(function(){\n\tvar cnzzId = window.$docsify.cnzzId\n\tvar unRepo = window.$docsify.repo || ''\n\tvar [un, repo] = unRepo.spli"
  },
  {
    "path": "asset/docsify-baidu-push.js",
    "chars": 412,
    "preview": "(function(){\n    var plugin = function(hook) {\n        hook.doneEach(function() {\n            new Image().src = \n       "
  },
  {
    "path": "asset/docsify-baidu-stat.js",
    "chars": 452,
    "preview": "(function(){\n    var plugin = function(hook) {\n        hook.doneEach(function() {\n            window._hmt = window._hmt "
  },
  {
    "path": "asset/docsify-clicker.js",
    "chars": 17248,
    "preview": "(function() {\n    var ids = [\n        '109577065', '108852955', '102682374', '100520874', '92400861', '90312982', \n     "
  },
  {
    "path": "asset/docsify-cnzz.js",
    "chars": 454,
    "preview": "(function(){\n    var plugin = function(hook) {\n        hook.doneEach(function() {\n            var sc = document.createEl"
  },
  {
    "path": "asset/docsify-quick-page.css",
    "chars": 736,
    "preview": "#prev-page-button {\n\tposition:fixed;\n\ttop:140px;\n\twidth: 35px;\n\theight: 35px;\n\tright: 15px;\n\tbackground-color: transpare"
  },
  {
    "path": "asset/docsify-quick-page.js",
    "chars": 1170,
    "preview": "document.addEventListener('DOMContentLoaded', function() {\t\n\tvar prevBtn = document.createElement(\"div\")\n\tprevBtn.id = \""
  },
  {
    "path": "asset/edit.css",
    "chars": 328,
    "preview": "#edit-btn {\n\tposition: fixed;\n    right: 15px;\n    top: 260px;\n    width: 35px;\n    height: 35px;\n    background-repeat:"
  },
  {
    "path": "asset/edit.js",
    "chars": 437,
    "preview": "document.addEventListener('DOMContentLoaded', function() {\n\tvar editBtn = document.createElement('div')\n\teditBtn.id = 'e"
  },
  {
    "path": "asset/prism-darcula.css",
    "chars": 2748,
    "preview": "/**\n * Darcula theme\n *\n * Adapted from a theme based on:\n * IntelliJ Darcula Theme (https://github.com/bulenkov/Darcula"
  },
  {
    "path": "asset/share.css",
    "chars": 296,
    "preview": "#share-btn {\n\tposition: fixed;\n\tright: 15px;\n\ttop: 220px;\n\twidth: 35px;\n\theight: 35px;\n\tbackground-repeat: no-repeat;\n\tb"
  },
  {
    "path": "asset/share.js",
    "chars": 17915,
    "preview": "document.addEventListener('DOMContentLoaded', function() {\n    var shareBtn = document.createElement('a')\n    shareBtn.i"
  },
  {
    "path": "asset/style.css",
    "chars": 1877,
    "preview": "    /*隐藏头部的目录*/\n    #main>ul:nth-child(1) {\n        display: none;\n    }\n\n    #main>ul:nth-child(2) {\n        display: n"
  },
  {
    "path": "asset/vue.css",
    "chars": 15537,
    "preview": "@import url(\"https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600\");\n* {\n  -webkit-font-smoot"
  },
  {
    "path": "docs/jianzhioffer/java/03_01_DuplicationInArray.md",
    "chars": 1693,
    "preview": "## 找出数组中重复的数字\n\n### 题目描述\n在一个长度为 `n` 的数组里的所有数字都在 `0` 到 `n-1` 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例"
  },
  {
    "path": "docs/jianzhioffer/java/03_02_DuplicationInArrayNoEdit.md",
    "chars": 2024,
    "preview": "## 不修改数组找出重复的数字\n\n### 题目描述\n在一个长度为 `n+1` 的数组里的所有数字都在 `1` 到 `n` 的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为"
  },
  {
    "path": "docs/jianzhioffer/java/04_FindInPartiallySortedMatrix.md",
    "chars": 1172,
    "preview": "## 二维数组中的查找\n\n### 题目描述\n在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。\n\n"
  },
  {
    "path": "docs/jianzhioffer/java/05_ReplaceSpaces.md",
    "chars": 2157,
    "preview": "## 替换空格\n\n### 题目描述\n请实现一个函数,将一个字符串中的每个空格替换成 `%20`。例如,当字符串为 `We Are Happy`,则经过替换之后的字符串为 `We%20Are%20Happy`。\n\n\n### 解法\n#### 解"
  },
  {
    "path": "docs/jianzhioffer/java/06_PrintListInReversedOrder.md",
    "chars": 2037,
    "preview": "## 从尾到头打印链表\n\n### 题目描述\n输入一个链表,按链表值从尾到头的顺序返回一个 `ArrayList`。\n\n\n### 解法\n#### 解法一【推荐】\n遍历链表,每个链表结点值 `push` 进栈,最后将栈中元素依次 `pop` 到"
  },
  {
    "path": "docs/jianzhioffer/java/07_ConstructBinaryTree.md",
    "chars": 1990,
    "preview": "## 重建二叉树\n\n### 题目描述\n输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 `{1,2,4,7,3,5,6,8}` 和中序遍历序列 `{4,7,"
  },
  {
    "path": "docs/jianzhioffer/java/08_NextNodeInBinaryTrees.md",
    "chars": 1523,
    "preview": "## 二叉树的下一个结点\n\n### 题目描述\n给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。\n\n\n### 解法\n对于结点 `pNode`:\n- 如果它有"
  },
  {
    "path": "docs/jianzhioffer/java/09_01_QueueWithTwoStacks.md",
    "chars": 836,
    "preview": "## 用两个栈实现队列\n\n### 题目描述\n用两个栈来实现一个队列,完成队列的 `Push` 和 `Pop` 操作。 队列中的元素为 `int` 类型。\n\n\n### 解法\n`Push` 操作,每次都存入 `stack1`;\n`Pop` 操作"
  },
  {
    "path": "docs/jianzhioffer/java/09_02_StackWithTwoQueues.md",
    "chars": 1011,
    "preview": "## 用两个队列实现栈\n\n### 题目描述\n用两个队列来实现一个栈,完成栈的 `Push` 和 `Pop` 操作。 栈中的元素为 `int` 类型。\n\n\n### 解法\n`Push` 操作,每次都存入 `queue1`;\n`Pop` 操作,每"
  },
  {
    "path": "docs/jianzhioffer/java/10_01_Fibonacci.md",
    "chars": 1249,
    "preview": "## 斐波那契数列\n\n### 题目描述\n大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第 `n` 项(从 `0` 开始,第 `0` 项为 `0`)。`n<=39`\n\n\n### 解法\n#### 解法一\n采用递归方式,简"
  },
  {
    "path": "docs/jianzhioffer/java/10_02_JumpFloor.md",
    "chars": 747,
    "preview": "## 跳台阶\n\n### 题目描述\n一只青蛙一次可以跳上`1`级台阶,也可以跳上`2`级。求该青蛙跳上一个`n`级的台阶总共有多少种跳法(先后次序不同算不同的结果)。\n\n### 解法\n跳上 `n` 级台阶,可以从 `n-1` 级跳 `1` 级"
  },
  {
    "path": "docs/jianzhioffer/java/10_03_JumpFloorII.md",
    "chars": 772,
    "preview": "## 变态跳台阶\n\n### 题目描述\n一只青蛙一次可以跳上`1`级台阶,也可以跳上`2`级……它也可以跳上`n`级。求该青蛙跳上一个`n`级的台阶总共有多少种跳法。\n\n### 解法\n跳上 `n-1` 级台阶,可以从 `n-2` 级跳 `1`"
  },
  {
    "path": "docs/jianzhioffer/java/10_04_RectCover.md",
    "chars": 1301,
    "preview": "## 矩形覆盖\n\n### 题目描述\n我们可以用`2*1`的小矩形横着或者竖着去覆盖更大的矩形。请问用`n`个`2*1`的小矩形无重叠地覆盖一个`2*n`的大矩形,总共有多少种方法?\n\n### 解法\n覆盖 `2*n` 的矩形:\n- 可以先覆盖"
  },
  {
    "path": "docs/jianzhioffer/java/11_MinNumberInRotatedArray.md",
    "chars": 2667,
    "preview": "## 旋转数组的最小数字\n\n### 题目描述\n把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组 `{3,4,5,1,2}` 为 `{1,2,3,4,5}"
  },
  {
    "path": "docs/jianzhioffer/java/12_StringPathInMatrix.md",
    "chars": 2154,
    "preview": "## 矩阵中的路径\n\n### 题目描述\n请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格"
  },
  {
    "path": "docs/jianzhioffer/java/13_RobotMove.md",
    "chars": 1912,
    "preview": "## 机器人的移动范围\n\n### 题目描述\n地上有一个`m`行和`n`列的方格。一个机器人从坐标`0,0`的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于`k`的格子。 例如,当`k`为`"
  },
  {
    "path": "docs/jianzhioffer/java/14_CuttingRope.md",
    "chars": 2065,
    "preview": "## 剪绳子\n\n### 题目描述\n给你一根长度为`n`绳子,请把绳子剪成`m`段(`m`、`n`都是整数,`n>1`并且`m≥1`)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]*k[1]*…*k[m]可能的最大乘积是多"
  },
  {
    "path": "docs/jianzhioffer/java/15_NumberOf1InBinary.md",
    "chars": 1147,
    "preview": "## 二进制中 1 的个数\n\n### 题目描述\n输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。\n\n### 解法\n#### 解法一\n利用整数 1,依次左移每次与 n 进行与运算,若结果不为0,说明这一位上数字为 1,++cn"
  },
  {
    "path": "docs/jianzhioffer/java/16_Power.md",
    "chars": 629,
    "preview": "## 数值的整数次方\n\n### 题目描述\n给定一个 `double` 类型的浮点数 `base` 和 `int` 类型的整数 `exponent`。求 `base`的 `exponent` 次方。\n\n### 解法\n注意判断值数是否小于 0。"
  },
  {
    "path": "docs/jianzhioffer/java/17_Print1ToMaxOfNDigits.md",
    "chars": 1763,
    "preview": "## 打印从 1 到最大的 n 位数\n\n### 题目描述\n输入数字 `n`,按顺序打印出从 `1` 最大的 `n` 位十进制数。比如输入 `3`,则打印出 `1、2、3` 一直到最大的 3 位数即 999。\n\n### 解法\n此题需要注意 n"
  },
  {
    "path": "docs/jianzhioffer/java/18_01_DeleteNodeInList.md",
    "chars": 1195,
    "preview": "## 在O(1)时间内删除链表节点\n\n### 题目描述\n给定单向链表的头指针和一个节点指针,定义一个函数在 O(1) 时间内删除该节点。\n\n### 解法\n判断要删除的节点是否是尾节点,若是,直接删除;若不是,把要删除节点的下一个节点赋给要删"
  },
  {
    "path": "docs/jianzhioffer/java/18_02_DeleteDuplicatedNode.md",
    "chars": 1976,
    "preview": "## 删除链表中重复的节点\n\n### 题目描述\n在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表`1->2->3->3->4->4->5` 处理后为 `1->2->5`。\n\n###"
  },
  {
    "path": "docs/jianzhioffer/java/19_RegularExpressionsMatching.md",
    "chars": 1867,
    "preview": "## 正则表达式匹配\n\n### 题目描述\n请实现一个函数用来匹配包括`.`和`*`的正则表达式。模式中的字符`.`表示任意一个字符,而`*`表示它前面的字符可以出现任意次(包含`0`次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例"
  },
  {
    "path": "docs/jianzhioffer/java/20_NumericStrings.md",
    "chars": 2290,
    "preview": "## 表示数值的字符串\n\n### 题目描述\n请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串\"+100\",\"5e2\",\"-123\",\"3.1416\"和\"-1E-16\"都表示数值。 但是\"12e\",\"1a3.14\",\""
  },
  {
    "path": "docs/jianzhioffer/java/21_ReorderArray.md",
    "chars": 1425,
    "preview": "## 调整数组顺序使奇数位于偶数前面\n\n### 题目描述\n输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。\n\n### 解"
  },
  {
    "path": "docs/jianzhioffer/java/22_KthNodeFromEnd.md",
    "chars": 1101,
    "preview": "## 链表中倒数第k个结点\n\n### 题目描述\n输入一个链表,输出该链表中倒数第k个结点。\n\n### 解法\npre 指针走 `k-1` 步。之后 cur 指针指向 phead,然后两个指针同时走,直至 pre 指针到达尾结点。\n\n> 当用一"
  },
  {
    "path": "docs/jianzhioffer/java/23_EntryNodeInListLoop.md",
    "chars": 1657,
    "preview": "## 链表中环的入口结点\n\n### 题目描述\n给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出`null`。\n\n### 解法\n- 先利用快慢指针。若能相遇,说明存在环,且相遇点一定是在环上;若没有相遇,说明不存在环,返回 `"
  },
  {
    "path": "docs/jianzhioffer/java/24_ReverseList.md",
    "chars": 1518,
    "preview": "## 反转链表\n\n### 题目描述\n输入一个链表,反转链表后,输出新链表的表头。\n\n### 解法\n#### 解法一\n利用头插法解决。\n\n```java\n\n/**\n * @author bingo\n * @since 2018/11/22\n "
  },
  {
    "path": "docs/jianzhioffer/java/25_MergeSortedLists.md",
    "chars": 2042,
    "preview": "## 合并两个排序的链表\n\n### 题目描述\n输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。\n\n### 解法\n#### 解法一\n同时遍历两链表进行 `merge`。\n\n```java\n\n/**\n"
  },
  {
    "path": "docs/jianzhioffer/java/26_SubstructureInTree.md",
    "chars": 1276,
    "preview": "## 树的子结构\n\n### 题目描述\n输入两棵二叉树`A`,`B`,判断`B`是不是`A`的子结构。(ps:我们约定空树不是任意一个树的子结构)\n\n### 解法\n递归方式遍历:\n\n- 在树A中找到和树B的根结点值一样的结点R\n- 判断树A以"
  },
  {
    "path": "docs/jianzhioffer/java/27_MirrorOfBinaryTree.md",
    "chars": 981,
    "preview": "## 二叉树的镜像\n\n### 题目描述\n操作给定的二叉树,将其变换为源二叉树的镜像。\n\n```\n源二叉树 \n    \t    8\n    \t   /  \\\n    \t  6   10\n    \t / \\  / \\\n    \t5  7 9 1"
  },
  {
    "path": "docs/jianzhioffer/java/28_SymmetricalBinaryTree.md",
    "chars": 1081,
    "preview": "## 对称的二叉树\n\n### 题目描述\n请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。\n\n### 解法\n比较二叉树的前序遍历序列和对称前序遍历序列是否一样,若是,说明是对称的。"
  },
  {
    "path": "docs/jianzhioffer/java/29_PrintMatrix.md",
    "chars": 2206,
    "preview": "## 顺时针打印矩阵\n\n### 题目描述\n输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下 `4 X 4` 矩阵: \n```\n1   2   3   4\n5   6   7   8\n9   10  11  1"
  },
  {
    "path": "docs/jianzhioffer/java/30_MinInStack.md",
    "chars": 1046,
    "preview": "## 包含min函数的栈\n\n### 题目描述\n定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为`O(1)`)。\n\n### 解法\n定义两个`stack`。\n\n压栈时,先将元素`node`压入`stac"
  },
  {
    "path": "docs/jianzhioffer/java/31_StackPushPopOrder.md",
    "chars": 1295,
    "preview": "## 栈的压入、弹出序列\n\n### 题目描述\n输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列`1,2,3,4,5`是某栈的压入顺序,序列`4,5,3,2,1`是"
  },
  {
    "path": "docs/jianzhioffer/java/32_01_PrintTreeFromTopToBottom.md",
    "chars": 1186,
    "preview": "## 不分行从上到下打印二叉树\n\n### 题目描述\n从上往下打印出二叉树的每个节点,同层节点从左至右打印。\n\n### 解法\n先将根节点进入队列。\n\n队头元素出队,将值存入 list,判断该元素是否有左/右子树,有的话依次进入队列中。队列为空"
  },
  {
    "path": "docs/jianzhioffer/java/32_02_PrintTreesInLines.md",
    "chars": 1466,
    "preview": "## 把二叉树打印成多行\n\n### 题目描述\n从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。\n\n### 解法\n与上一题类似,只不过需要用变量记录每一层要打印多少个节点。\n\n```java\nimport java.util."
  },
  {
    "path": "docs/jianzhioffer/java/32_03_PrintTreesInZigzag.md",
    "chars": 2195,
    "preview": "## 按之字形打印二叉树\n\n### 题目描述\n请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。\n\n如二叉树:\n```\n            1"
  },
  {
    "path": "docs/jianzhioffer/java/33_SquenceOfBST.md",
    "chars": 1252,
    "preview": "## 二叉搜索树的后序遍历序列\n\n### 题目描述\n输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出`Yes`,否则输出`No`。假设输入的数组的任意两个数字都互不相同。\n\n### 解法\n序列的最后一个元素是二叉"
  },
  {
    "path": "docs/jianzhioffer/java/34_PathInTree.md",
    "chars": 1317,
    "preview": "## 二叉树中和为某一值的路径\n\n### 题目描述\n输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的`list`中,数组"
  },
  {
    "path": "docs/jianzhioffer/java/35_CopyComplexList.md",
    "chars": 1689,
    "preview": "## 复杂链表的复制\n\n### 题目描述\n输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的 `head`。(注意,输出结果中请不要返回参数中的节点引用,否则"
  },
  {
    "path": "docs/jianzhioffer/java/36_ConvertBinarySearchTree.md",
    "chars": 1438,
    "preview": "## 二叉搜索树与双向链表\n\n### 题目描述\n输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。\n\n### 解法\n由于是二叉搜索树,因此中序遍历的结果就是排序的。\n\n中序遍历"
  },
  {
    "path": "docs/jianzhioffer/java/37_SerializeBinaryTrees.md",
    "chars": 1835,
    "preview": "## 序列化二叉树\n\n### 题目描述\n请实现两个函数,分别用来序列化和反序列化二叉树。使用前序遍历实现,空节点使用字符`#` 表示。\n\n比如有如下二叉树:\n\n```java\n\t\t\t1\n\t\t2\t \t3\n\t4\t  #\t 5\t\t6\n #\t  #"
  },
  {
    "path": "docs/jianzhioffer/java/38_StringPermutation.md",
    "chars": 1838,
    "preview": "## 字符串的排列\n\n### 题目描述\n输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。(输入一个字符串,长度不超"
  },
  {
    "path": "docs/jianzhioffer/java/39_MoreThanHalfNumber.md",
    "chars": 3510,
    "preview": "## 数组中出现次数超过一半的数字\n\n### 题目描述\n数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为 9 的数组 `{1,2,3,2,2,2,5,4,2}`。由于数字 2 在数组中出现了 5 次,超过数组"
  },
  {
    "path": "docs/jianzhioffer/java/40_KLeastNumbers.md",
    "chars": 3087,
    "preview": "## 获取数组中最小的k个数\n\n### 题目描述\n输入 n 个整数,找出其中最小的 K 个数。例如输入 `4,5,1,6,2,7,3,8` 这 8 个数字,则最小的 4 个数字是 `1,2,3,4`。\n\n### 解法\n#### 解法一\n利用"
  },
  {
    "path": "docs/jianzhioffer/java/41_StreamMedian.md",
    "chars": 1468,
    "preview": "## 数据流中的中位数\n\n### 题目描述\n如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用`"
  },
  {
    "path": "docs/jianzhioffer/java/42_GreatestSumOfSubarrays.md",
    "chars": 884,
    "preview": "## 连续子数组的最大和\n\n### 题目描述\n输入一个**非空**整型数组,数组里的数可能为正,也可能为负。\n数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。\n\n要求时间复杂度为`O(n)`。\n\n### 解法\n动态规划法"
  },
  {
    "path": "docs/jianzhioffer/java/43_NumberOf1.md",
    "chars": 1731,
    "preview": "## 整数中1出现的次数\n\n### 题目描述\n求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。AC"
  },
  {
    "path": "docs/jianzhioffer/java/44_DigitsInSequence.md",
    "chars": 1561,
    "preview": "## 数字序列中某一位的数字\n\n### 题目描述\n数字以 `0123456789101112131415…` 的格式序列化到一个字符序列中。\n\n在这个序列中,第 5 位(从 0 开始计数)是 5,第 13 位是 1,第 19 位是 4,等等"
  },
  {
    "path": "docs/jianzhioffer/java/45_SortArrayForMinNumber.md",
    "chars": 936,
    "preview": "## 把数组排成最小的数\n\n### 题目描述\n输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。\n\n例如输入数组 `[3, 32, 321]`,则打印出这3个数字能排成的最小数字`321323`。\n"
  },
  {
    "path": "docs/jianzhioffer/java/46_TranslateNumbersToStrings.md",
    "chars": 1172,
    "preview": "## 把数字翻译成字符串\n\n### 题目描述\n给定一个数字,我们按照如下规则把它翻译为字符串:\n\n0 翻译成 ”a”,1 翻译成 ”b”,……,11 翻译成 ”l”,……,25 翻译成 ”z”。\n\n一个数字可能有多个翻译。例如 12258 "
  },
  {
    "path": "docs/jianzhioffer/java/47_MaxValueOfGifts.md",
    "chars": 1165,
    "preview": "## 礼物的最大价值\n\n### 题目描述\n在一个 `m×n` 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。\n\n你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或者向下移动一格直到到达棋盘的右下角。\n\n给定一个棋盘"
  },
  {
    "path": "docs/jianzhioffer/java/48_LongestSubstringWithoutDup.md",
    "chars": 1471,
    "preview": "## 最长不含重复字符的子字符串\n\n### 题目描述\n请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。\n\n假设字符串中只包含从 `a` 到 `z`的字符。\n\n### 解法\n动态规划。\n\n`res[i]` 表示以"
  },
  {
    "path": "docs/jianzhioffer/java/49_UglyNumber.md",
    "chars": 2281,
    "preview": "## 丑数\n\n### 题目描述\n把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。\n\n### 解法1\n由题目"
  },
  {
    "path": "docs/jianzhioffer/java/50_01_FirstNotRepeatingChar.md",
    "chars": 1002,
    "preview": "## 第一个只出现一次的字符\n\n### 题目描述\n在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).\n\n### 解法1\n使用HashMap来"
  },
  {
    "path": "docs/jianzhioffer/java/50_02_FristCharacterInStream.md",
    "chars": 981,
    "preview": "## 字符流中第一个不重复的字符\n\n### 题目描述\n\n请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符\"go\"时,第一个只出现一次的字符是\"g\"。当从该字符流中读出前六个字符“google\"时,第一"
  },
  {
    "path": "docs/jianzhioffer/java/52_FirstCommonNodesInLists.md",
    "chars": 1676,
    "preview": "## 两个链表的第一个公共结点\n\n### 题目描述\n输入两个链表,找出它们的第一个公共结点。\n\n**样例**\n```\n给出两个链表如下所示:\nA:        a1 → a2\n                   ↘\n          "
  },
  {
    "path": "docs/jianzhioffer/java/53_01_NumberOfK.md",
    "chars": 2147,
    "preview": "## 数字在排序数组中出现的次数\n\n### 题目描述\n统计一个数字在排序数组中出现的次数。\n\n例如输入排序数组 `[1, 2, 3, 3, 3, 3, 4, 5]` 和数字 3,由于 3 在这个数组中出现了 4 次,因此输出 4。\n\n**样"
  },
  {
    "path": "docs/jianzhioffer/java/53_02_MissingNumber.md",
    "chars": 1071,
    "preview": "## 0到n-1中缺失的数字\n\n### 题目描述\n一个长度为 `n-1` 的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围 `0` 到 `n-1` 之内。\n\n在范围 `0` 到 `n-1` 的 `n` 个数字中有且只有一个数字不在"
  },
  {
    "path": "docs/jianzhioffer/java/53_03_IntegerIdenticalToIndex.md",
    "chars": 1064,
    "preview": "## 数组中数值和下标相等的元素\n\n### 题目描述\n假设一个单调递增的数组里的每个元素都是整数并且是唯一的。\n\n请编程实现一个函数找出数组中任意一个数值等于其下标的元素。\n\n例如,在数组 `[-3, -1, 1, 3, 5]` 中,数字 "
  },
  {
    "path": "docs/jianzhioffer/java/54_KthNodeInBST.md",
    "chars": 939,
    "preview": "## 二叉搜索树的第k个结点\n\n### 题目描述\n给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4\n\n### 解法\n因为BST的中序遍历得到的是一个升序的列"
  },
  {
    "path": "docs/jianzhioffer/java/55_01_TreeDepth.md",
    "chars": 885,
    "preview": "## 二叉树的深度\n\n### 题目描述\n输入一棵二叉树的根结点,求该树的深度。\n\n从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。\n\n**样例**\n```\n输入:二叉树[8, 12, 2, null"
  },
  {
    "path": "docs/jianzhioffer/java/55_02_BalancedBinaryTree.md",
    "chars": 2189,
    "preview": "## 平衡二叉树\n\n### 题目描述\n输入一棵二叉树的根结点,判断该树是不是平衡二叉树。\n\n如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。\n\n**注意:**\n\n- 规定空树也是一棵平衡二叉树。\n\n**样例**"
  },
  {
    "path": "docs/jianzhioffer/java/56_01_NumbersAppearOnce.md",
    "chars": 1352,
    "preview": "## 数组中只出现一次的两个数字\n\n### 题目描述\n一个整型数组里除了两个数字之外,其他的数字都出现了两次。\n\n请写程序找出这两个只出现一次的数字。\n\n你可以假设这两个数字一定存在。\n\n**样例**\n```\n输入:[1,2,3,3,4,4"
  },
  {
    "path": "docs/jianzhioffer/java/56_02_NumberAppearingOnce.md",
    "chars": 1061,
    "preview": "## 数组中唯一只出现一次的数字\n\n### 题目描述\n在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次。\n\n请找出那个只出现一次的数字。\n\n你可以假设满足条件的数字一定存在。\n\n**思考题:**\n\n- 如果要求只使用 `O(n)"
  },
  {
    "path": "docs/jianzhioffer/java/57_01_TwoNumbersWithSum.md",
    "chars": 1206,
    "preview": "## 和为S的两个数字\n\n### 题目描述\n输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。ps:对应每个测试案例,输出两个数,小的先输出。\n\n### 解法\n定"
  },
  {
    "path": "docs/jianzhioffer/java/57_02_ContinuousSquenceWithSum.md",
    "chars": 1709,
    "preview": "## 和为S的连续正数序列\n\n### 题目描述\n输入一个正数 s,打印出所有和为 s 的连续正数序列(至少含有两个数)。\n\n例如输入 15,由于 `1+2+3+4+5=4+5+6=7+8=15`,所以结果打印出 3 个连续序列 1~5、4~"
  },
  {
    "path": "docs/jianzhioffer/java/58_01_ReverseWordsInSentence.md",
    "chars": 926,
    "preview": "##  翻转单词顺序\n\n### 题目描述\n输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。\n\n为简单起见,标点符号和普通字母一样处理。\n\n例如输入字符串 `\"I am a student.\"`,则输出 `\"student. "
  },
  {
    "path": "docs/jianzhioffer/java/58_02_LeftRotateString.md",
    "chars": 1148,
    "preview": "## 左旋转字符串\n\n### 题目描述\n字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。\n\n请定义一个函数实现字符串左旋转操作的功能。\n\n比如输入字符串 `\"abcdefg\"` 和数字 2,该函数将返回左旋转 2 位得到的结"
  },
  {
    "path": "docs/jianzhioffer/java/59_01_MaxInSlidingWindow.md",
    "chars": 1690,
    "preview": "## 滑动窗口的最大值\n\n### 题目描述\n给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。\n\n例如,如果输入数组 `[2, 3, 4, 2, 6, 2, 5, 1]` 及滑动窗口的大小 3,那么一共存在 6 个滑动窗口,它们的"
  },
  {
    "path": "docs/jianzhioffer/java/61_ContinousCards.md",
    "chars": 1306,
    "preview": "## 扑克牌的顺子\n\n### 题目描述\n从扑克牌中随机抽 `5` 张牌,判断是不是一个顺子,即这5张牌是不是连续的。\n\n`2~10` 为数字本身,`A` 为`1`,`J` 为 `11`,`Q` 为 `12`,`K` 为 `13`,大小王可以"
  },
  {
    "path": "docs/jianzhioffer/java/README.md",
    "chars": 4958,
    "preview": "# 剑指 Offer Java 题解\n\n> 来源:[《剑指 Offer》 Java 版实现](https://github.com/doocs/coding-interview)\n\n| # | Title |\n|---|---|\n| 03_"
  },
  {
    "path": "docs/jianzhioffer/java/SUMMARY.md",
    "chars": 3027,
    "preview": "+   [剑指 Offer Java 题解](README.md)\n+   [找出数组中重复的数字](03_01_DuplicationInArray.md)\n+   [不修改数组找出重复的数字](03_02_DuplicationInAr"
  },
  {
    "path": "docs/leetcode/cpp/0001._Two_Sum.md",
    "chars": 1871,
    "preview": "# 1. Two Sum\n **<font color=red>难度: Easy</font>**\n ## 刷题内容\n > 原题连接\n * https://leetcode.com/problems/two-sum\n* https://le"
  },
  {
    "path": "docs/leetcode/cpp/0002._Add_Two_Numbers.md",
    "chars": 1128,
    "preview": "# 2. Add Two Numbers\n\n**<font color=red>难度:Medium</font>**\n\n## 刷题内容\n\n> 原题连接\n\n* https://leetcode.com/problems/add-two-num"
  },
  {
    "path": "docs/leetcode/cpp/0003._Longest_Substring_Without_Repeating_Characters.md",
    "chars": 2036,
    "preview": "# 3. Longest Substring Without Repeating Characters\n\n**<font color=red>难度:Medium</font>**\n\n## 刷题内容\n\n> 原题连接\n\n* https://le"
  },
  {
    "path": "docs/leetcode/cpp/0004._Median_of_Two_Sorted_Arrays.md",
    "chars": 4750,
    "preview": "# 004. Median of Two Sorted Arrays\n\n**<font color=red>难度Hard<font>**\n\n## 刷题内容\n> 原题连接\n\n* https://leetcode.com/problems/me"
  },
  {
    "path": "docs/leetcode/cpp/0005._Longest_Palindromic_Substring.md",
    "chars": 1228,
    "preview": "# 5. Longest Palindromic Substring\n\n**<font color=red>难度:Medium</font>**\n\n## 刷题内容\n\n> 原题连接\n\n* https://leetcode.com/proble"
  },
  {
    "path": "docs/leetcode/cpp/0006._ZigZag_Conversion.md",
    "chars": 2542,
    "preview": "# 6. ZigZag Conversion\n\n**<font color=red>难度:Medium</font>**\n\n## 刷题内容\n\n> 原题连接\n\n*https://leetcode.com/problems/zigzag-con"
  },
  {
    "path": "docs/leetcode/cpp/0007._Reverse_Integer.md",
    "chars": 864,
    "preview": "# 7. Reverse Integer\n\n**<font color=red>Ѷ:Easy<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/reverse-integer/\n\n> \n\n"
  },
  {
    "path": "docs/leetcode/cpp/0008._String_to_Integer_(atoi).md",
    "chars": 3169,
    "preview": "# 8. String to Integer (atoi)\n\n**<font color=red>Ѷ:Medium<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/string-to-i"
  },
  {
    "path": "docs/leetcode/cpp/0009._Palindrome_Number.md",
    "chars": 1857,
    "preview": "# 9. Palindrome Number\n\n**<font color=red>难度:Medium</font>**\n\n## 刷题内容\n\n> 原题连接\n\n* https://leetcode.com/problems/palindrom"
  },
  {
    "path": "docs/leetcode/cpp/0010._Regular_Expression_Matching.md",
    "chars": 2466,
    "preview": "# 10. Regular Expression Matching\n\n**<font color=red>难度: Hard</font>**\n\n## 刷题内容\n\n> 原题连接\n\n* https://leetcode.com/problems"
  },
  {
    "path": "docs/leetcode/cpp/0011._Container_With_Most_Water.md",
    "chars": 1020,
    "preview": "# 11. container with most water\n\n**<font color=red>难度:Medium</font>**\n\n## 刷题内容\n\n> 原题连接\n\n*https://leetcode.com/problems/c"
  },
  {
    "path": "docs/leetcode/cpp/0012._Integer_to_Roman.md",
    "chars": 4492,
    "preview": "# 12. Integer to Roman\n\n**<font color=red>Ѷ:Medium<font>**\n\n## ˢ\n\n> ԭ\n\n* https://leetcode.com/problems/rotate-list/\n\n> \n"
  },
  {
    "path": "docs/leetcode/cpp/0014._Longest_Common_Prefix.md",
    "chars": 1147,
    "preview": "# 14. Longest Common Prefix\n\n**<font color=red>Ѷ:Easy<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/longest-common-"
  },
  {
    "path": "docs/leetcode/cpp/0015._3sum.md",
    "chars": 1344,
    "preview": "# 15. 3sum\n\n**<font color=red>难度:Medium</font>**\n\n## 刷题内容\n\n> 原题连接\n\n*https://leetcode.com/problems/3sum\n* \n> 内容描述\n\n```\nGi"
  },
  {
    "path": "docs/leetcode/cpp/0016._3Sum_Closest.md",
    "chars": 1342,
    "preview": "## 16. 3Sum Closest\n\n难度:Medium\n\n## 内容\n\n> 原题链接:https://leetcode.com/problems/3sum-closest\n\nGiven an array nums of n integ"
  },
  {
    "path": "docs/leetcode/cpp/0017._Letter_Combinations_of_a_Phone_Number.md",
    "chars": 1504,
    "preview": "# 17. Letter Combinations of a Phone Number\n\n**<font color=red>Ѷ:Medium<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/proble"
  },
  {
    "path": "docs/leetcode/cpp/0018._4Sum.md",
    "chars": 1538,
    "preview": "## 18. 4Sum\n\n难度:Medium\n\n## 内容\n\n题目链接:https://leetcode.com/problems/4sum\n\nGiven an array nums of n integers and an integer"
  },
  {
    "path": "docs/leetcode/cpp/0019._Remove_Nth_Node_From_End_of_List.md",
    "chars": 1201,
    "preview": "# 19. Remove Nth Node From End of List\n\n**<font color=red>Ѷ:Medium<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/re"
  },
  {
    "path": "docs/leetcode/cpp/0020._Valid_Parentheses.md",
    "chars": 1312,
    "preview": "## 20. Valid Parentheses\n **<font color=red>难度: Easy</font>**\n## 刷题内容\n> 原题连接\n* https://leetcode-cn.com/problems/valid-pa"
  },
  {
    "path": "docs/leetcode/cpp/0021._Merge_Two_Sorted_Lists.md",
    "chars": 1565,
    "preview": "# 21. Merge Two Sorted Lists\n\n**<font color=red>难度:Easy</font>**\n\n## 刷题内容\n\n> 原题连接\n\n* https://leetcode.com/problems/merge"
  },
  {
    "path": "docs/leetcode/cpp/0022._Generate_Parentheses.md",
    "chars": 743,
    "preview": "# 22. Generate Parentheses\n\n **<font color=red>难度: Medium</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode-cn.com/problem"
  },
  {
    "path": "docs/leetcode/cpp/0023._Merge_K_Sorted_Lists.md",
    "chars": 2673,
    "preview": "# 23. merge k sorted lists\n\n**<font color=red>难度: Hard</font>**\n\n## 刷题内容\n\n> 原题连接\n\n* https://leetcode.com/problems/merge-"
  },
  {
    "path": "docs/leetcode/cpp/0024._Swap_Nodes_in_Pairs.md",
    "chars": 849,
    "preview": "# 24. Swap Nodes in Pairs\n\n **<font color=red>难度: Medium</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode-cn.com/problems"
  },
  {
    "path": "docs/leetcode/cpp/0025._Reverse_Nodes_In_K_Group.md",
    "chars": 1607,
    "preview": "# 25.reverse nodes in k group\n\n**<font color=red>ѶHard</font>**\n\n## ˢ\n\n> ԭ\n\n* https://leetcode.com/problems/reverse-node"
  },
  {
    "path": "docs/leetcode/cpp/0026._Remove_Duplicates_From_Sorted_Array.md",
    "chars": 1950,
    "preview": "# 26.Remove Duplicates From Sorted Array\n\n**<font color=red>ѶEasy</font>**\n\n## ˢ\n\n> ԭ\n\n* https://leetcode.com/problems/r"
  },
  {
    "path": "docs/leetcode/cpp/0027._Remove_Element.md",
    "chars": 1996,
    "preview": "# 27.Remove Element\n\n**<font color=red>ѶEasy</font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/remove-element/\n\n> \n\n``"
  },
  {
    "path": "docs/leetcode/cpp/0028._Implement_Strstr.md",
    "chars": 1273,
    "preview": "# 28.implement strstr\n\n**<font color=red>ѶEasy</font>**\n\n## ˢ\n\n> ԭ\n\n* https://leetcode.com/problems/implement-strstr/\n> "
  },
  {
    "path": "docs/leetcode/cpp/0029._Divide_Two_Integers.md",
    "chars": 1978,
    "preview": "# 29.divide two integers\n\n**<font color=red>ѶMedium</font>**\n\n## ˢ\n\n> ԭ\n\n* https://leetcode.com/problems/divide-two-inte"
  },
  {
    "path": "docs/leetcode/cpp/0030._Substring_With_Concatenation_Of_All_Words.md",
    "chars": 1721,
    "preview": "# 30.substring with concatenation of all words\n\n**<font color=red>难度Hard</font>**\n\n## 刷题内容\n\n> 原题连接\n\n* https://leetcode.c"
  },
  {
    "path": "docs/leetcode/cpp/0031._Next_Permutatio.md",
    "chars": 1651,
    "preview": "# 31.Next Permutatio\n\n**<font color=red>难度Medium</font>**\n\n## 刷题内容\n> 原题连接\n\n* https://leetcode.com/problems/next-permutat"
  },
  {
    "path": "docs/leetcode/cpp/0032._Longest_Valid_Parentheses.md",
    "chars": 1293,
    "preview": "# 32. Longest Valid Parentheses\n\n**<font color=red>Ѷ:Hard<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/longest-val"
  },
  {
    "path": "docs/leetcode/cpp/0033._Search_in_Rotated_Sorted_Array.md",
    "chars": 1767,
    "preview": "# 033. Search in Rotated Sorted Array\n\n**<font color=red>难度Medium<font>**\n\n## 刷题内容\n> 原题连接\n\n* https://leetcode.com/proble"
  },
  {
    "path": "docs/leetcode/cpp/0034._Find_First_and_Last_Position_of_Element_in_Sorted_Array.md",
    "chars": 2381,
    "preview": "# 34. Find First and Last Position of Element in Sorted Array\n\n**<font color=red>Ѷ:Medium<font>**\n\n## ˢ\n> ԭ\n\n* https://l"
  },
  {
    "path": "docs/leetcode/cpp/0035._Search_Insert_Position.md",
    "chars": 1375,
    "preview": "# 35.search insert position\n\n**<font color=red>难度:Easy</font>**\n\n## 刷题内容\n\n> 原题连接\n\n*https://leetcode.com/problems/search-"
  },
  {
    "path": "docs/leetcode/cpp/0036._Valid_Sudoku.md",
    "chars": 2699,
    "preview": "# 36. Valid Sudoku\n\n**<font color=red>Ѷ:Medium<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/valid-sudoku/\n\n> \n\n```"
  },
  {
    "path": "docs/leetcode/cpp/0038._Count_and_Say.md",
    "chars": 1321,
    "preview": "# 38. Count and Say\n\n**<font color=red>Ѷ:Easy<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/count-and-say/\n\n> \n\n```"
  },
  {
    "path": "docs/leetcode/cpp/0039._Combination_Sum.md",
    "chars": 1132,
    "preview": "# 39. Combination Sum\n\n **<font color=red>难度: Middle</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode-cn.com/problems/com"
  },
  {
    "path": "docs/leetcode/cpp/0040._Combination_Sum_II.md",
    "chars": 1225,
    "preview": "# 40. Combination Sum II\n\n **<font color=red>难度: Medium</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode-cn.com/problems/"
  },
  {
    "path": "docs/leetcode/cpp/0041._First_Missing_Positive.md",
    "chars": 923,
    "preview": "# 041.First Missing Positive\n\n**<font color=red>ѶHard</font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/first-missing-"
  },
  {
    "path": "docs/leetcode/cpp/0042._Trapping_Rain_Water.md",
    "chars": 1352,
    "preview": "# 42. Trapping Rain Water\n\n**<font color=red>ѶHard<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/trapping-rain-wate"
  },
  {
    "path": "docs/leetcode/cpp/0043._Multiply_Strings.md",
    "chars": 2011,
    "preview": "# 43. Multiply Strings\n\n**<font color=red>Ѷ:Medium<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/multiply-strings/\n"
  },
  {
    "path": "docs/leetcode/cpp/0044._Wildcard_Matching.md",
    "chars": 2288,
    "preview": "# 44. Wildcard Matching\n\n**<font color=red>Ѷ:Hard<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/wildcard-matching/\n"
  },
  {
    "path": "docs/leetcode/cpp/0045._Jump_Game_II.md",
    "chars": 1239,
    "preview": "# 045. Jump Game II\n\n**<font color=red>ѶHard<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/jump-game-ii/\n\n> \n\n```\nG"
  },
  {
    "path": "docs/leetcode/cpp/0046._Permutations.md",
    "chars": 1991,
    "preview": "# 46. Permutations\n\n**<font color=red>Ѷ:Medium<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/permutations/\n\n> \n\n```"
  },
  {
    "path": "docs/leetcode/cpp/0047._Permutations_II.md",
    "chars": 2388,
    "preview": "# 47. Permutations II\n\n**<font color=red>Ѷ:Medium<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/permutations-ii/\n\n>"
  },
  {
    "path": "docs/leetcode/cpp/0048._Rotate_Image.md",
    "chars": 1317,
    "preview": "# 49. Group Anagrams\n\n **<font color=red>难度: Medium</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode.com/problems/rotate-"
  },
  {
    "path": "docs/leetcode/cpp/0049._Group_Anagrams.md",
    "chars": 815,
    "preview": "# 49. Group Anagrams\n\n **<font color=red>难度: Medium</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode-cn.com/problems/grou"
  },
  {
    "path": "docs/leetcode/cpp/0050._powx_n.md",
    "chars": 1168,
    "preview": "# 50. powx n\n\n**<font color=red>难度:Medium</font>**\n\n## 刷题内容\n\n> 原题连接\n\n* https://leetcode.com/problems/powx-n/\n\n> 内容描述\n\n``"
  },
  {
    "path": "docs/leetcode/cpp/0051._N-Queens.md",
    "chars": 2096,
    "preview": "# 51. N-Queens\n\n**<font color=red>Ѷ:Hard<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/n-queens/\n\n> \n\n```\nThe n-que"
  },
  {
    "path": "docs/leetcode/cpp/0052._N-Queens_II.md",
    "chars": 1638,
    "preview": "# 52. N-Queens II\n\n**<font color=red>Ѷ:Hard<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/n-queens-ii/\n\n> \n\n```\nThe"
  },
  {
    "path": "docs/leetcode/cpp/0053._Maximum_Subarray.md",
    "chars": 1750,
    "preview": "# 053. Maximum Subarray\n\n**<font color=red>ѶEasy<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/maximum-subarray/\n\n>"
  },
  {
    "path": "docs/leetcode/cpp/0054._Spiral_Matrix.md",
    "chars": 1453,
    "preview": "# 54. Spiral Matrix\n\n**<font color=red>Ѷ:Medium<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/spiral-matrix/submiss"
  },
  {
    "path": "docs/leetcode/cpp/0055._Jump_Game.md",
    "chars": 1334,
    "preview": "# 55. Jump Game\n\n**<font color=red>Ѷ:Medium<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/jump-game/submissions/\n\n>"
  },
  {
    "path": "docs/leetcode/cpp/0056._Merge_Intervals.md",
    "chars": 1506,
    "preview": "# 56. Merge Intervals\n\n**<font color=red>Ѷ:Medium<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/merge-intervals/\n\n>"
  },
  {
    "path": "docs/leetcode/cpp/0057._Insert_Interval.md",
    "chars": 2470,
    "preview": "# 57. Insert Interval\n\n**<font color=red>Ѷ:Hard<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/insert-interval/\n\n> \n"
  },
  {
    "path": "docs/leetcode/cpp/0058._Length_of_Last_Word.md",
    "chars": 725,
    "preview": "# 058. Length of Last Word\n\n**<font color=red>难度Easy<font>**\n\n## 刷题内容\n> 原题连接\n\n* https://leetcode.com/problems/length-of-"
  },
  {
    "path": "docs/leetcode/cpp/0059._Spiral_Matrix_II.md",
    "chars": 1237,
    "preview": "# 59. Spiral Matrix II\n\n**<font color=red>Ѷ:Medium<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/spiral-matrix-ii/\n"
  },
  {
    "path": "docs/leetcode/cpp/0060._Permutation_Sequence.md",
    "chars": 1343,
    "preview": "# 60. Permutation Sequence\n\n**<font color=red>Ѷ:Medium<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/permutation-se"
  },
  {
    "path": "docs/leetcode/cpp/0061._Rotate_List.md",
    "chars": 1540,
    "preview": "# 61. Rotate List\n\n\n\n**<font color=red>Ѷ:Medium<font>**\n\n\n\n## ˢ\n\n> ԭ\n\n\n* https://leetcode.com/problems/rotate-list/\n\n\n\n>"
  },
  {
    "path": "docs/leetcode/cpp/0062._Unique_Paths.md",
    "chars": 894,
    "preview": "# 62. Unique Paths\n\n **<font color=red>难度: Medium</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode-cn.com/problems/unique"
  },
  {
    "path": "docs/leetcode/cpp/0063._Unique_Paths_II.md",
    "chars": 1901,
    "preview": "# 63. Unique Paths II\n\n**<font color=red>难度:Medium<font>**\n\n## 刷题内容\n\n> 原题连接\n\n* https://leetcode.com/problems/unique-path"
  },
  {
    "path": "docs/leetcode/cpp/0064._Minimum_Path_Sum.md",
    "chars": 894,
    "preview": "# 64. Minimum Path Sum\n\n **<font color=red>难度: Middle</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode-cn.com/problems/mi"
  },
  {
    "path": "docs/leetcode/cpp/0065._Valid_Number.md",
    "chars": 2487,
    "preview": "# 65. Valid Number\n\n**<font color=red>Ѷ:Hard<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/valid-number/\n\n> \n\n```\nV"
  },
  {
    "path": "docs/leetcode/cpp/0066._Plus_One.md",
    "chars": 1061,
    "preview": "# 66. Plus One\n\n**<font color=red>Ѷ:Easy<font>**\n\n## ˢ\n\n> ԭ\n\n* https://leetcode.com/problems/plus-one/\n\n> \n\n```\nGiven a "
  },
  {
    "path": "docs/leetcode/cpp/0068._Text_Justification.md",
    "chars": 4173,
    "preview": "# 68. Text Justification\n\n**<font color=red>Ѷ:Hard<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/text-justification"
  },
  {
    "path": "docs/leetcode/cpp/0069._Sqr(x).md",
    "chars": 1293,
    "preview": "# 69. Sqrt(x)\n\n**<font color=red>Ѷ:Easy<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/sqrtx/\n\n> \n\n```\nImplement int"
  },
  {
    "path": "docs/leetcode/cpp/0072._Edit_Distance.md",
    "chars": 1935,
    "preview": "# 72. Edit Distance\n\n**<font color=red>难度Hard</font>**\n\n## 刷题内容\n> 原题连接\n\n* https://leetcode.com/problems/edit-distance/\n\n"
  },
  {
    "path": "docs/leetcode/cpp/0075._Sort_Colors.md",
    "chars": 1007,
    "preview": "# 75. Sort Colors\n\n **<font color=red>难度: Medium</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode-cn.com/problems/sort-co"
  },
  {
    "path": "docs/leetcode/cpp/0076._Minimum_Window_Substring.md",
    "chars": 1896,
    "preview": "# 76. Minimum Window Substring\n\n**<font color=red>Ѷ:Hard<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/minimum-wind"
  },
  {
    "path": "docs/leetcode/cpp/0077._combinations.md",
    "chars": 735,
    "preview": "# 77. Combinations\n\n**<font color=red>难度: Medium</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode-cn.com/problems/combina"
  },
  {
    "path": "docs/leetcode/cpp/0078._subsets.md",
    "chars": 739,
    "preview": "# 78. Subsets\n\n **<font color=red>难度: Medium</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode-cn.com/problems/subsets/\n  "
  },
  {
    "path": "docs/leetcode/cpp/0081._Search_in_Rotated_Sorted_Array_II.md",
    "chars": 2052,
    "preview": "# 81. Search in Rotated Sorted Array II\n\n**<font color=red>Ѷ:Medium<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/s"
  },
  {
    "path": "docs/leetcode/cpp/0083._Remove_Duplicates_From_Sorted_Lists.md",
    "chars": 1022,
    "preview": "#83. remove-duplicates-from-sorted-list\n\n**<font color=red>Ѷ:Easy</font>**\n\n## ˢ\n\n> ԭ\n\n*https://leetcode.com/problems/re"
  },
  {
    "path": "docs/leetcode/cpp/0084._Largest_Rectangle_in_Histogram.md",
    "chars": 2655,
    "preview": "# 84. Largest Rectangle in Histogram\n\n**<font color=red>难度:Hard<font>**\n\n## 刷题内容\n> 原题连接\n\n* https://leetcode.com/problems"
  },
  {
    "path": "docs/leetcode/cpp/0085._Maximal_Rectangle.md",
    "chars": 2881,
    "preview": "# 85. Maximal Rectangle\n\n**<font color=red>Ѷ:Hard<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/maximal-rectangle/\n"
  },
  {
    "path": "docs/leetcode/cpp/0087._Scramble_String.md",
    "chars": 2889,
    "preview": "# 87. Scramble String\n\n**<font color=red>Ѷ:Hard<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/scramble-string/\n\n> \n"
  },
  {
    "path": "docs/leetcode/cpp/0088._Merge_Sorted_Array.md",
    "chars": 1275,
    "preview": "# 88.Merge Sorted Array\n\n**<font color=red>ѶEasy</font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/merge-sorted-array/"
  },
  {
    "path": "docs/leetcode/cpp/0090._Subsets_II.md",
    "chars": 900,
    "preview": "# 90. Subsets II\n\n **<font color=red>难度: Medium</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode-cn.com/problems/subsets-"
  },
  {
    "path": "docs/leetcode/cpp/0094._binary_tree_inorder_traversal.md",
    "chars": 600,
    "preview": "# 94. Binary Tree Inorder Traversal\n **<font color=red>难度: Medium</font>**\n\n ## 刷题内容\n > 原题连接\n\n* https://leetcode-cn.com/"
  },
  {
    "path": "docs/leetcode/cpp/0096._Unique_Binary_Search_Trees.md",
    "chars": 782,
    "preview": "# 96. Unique Binary Search Trees\n\n **<font color=red>难度: Medium</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode-cn.com/p"
  },
  {
    "path": "docs/leetcode/cpp/0097._Interleaving_String.md",
    "chars": 1246,
    "preview": "# 97. Interleaving String\n\n**<font color=red>Ѷ:Hard<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/interleaving-stri"
  },
  {
    "path": "docs/leetcode/cpp/0099._Recover_Binary_Search_Tree.md",
    "chars": 1212,
    "preview": "# 99. Recover Binary Search Tree\n\n**<font color=red>Ѷ:Hard<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/recover-bi"
  },
  {
    "path": "docs/leetcode/cpp/0100._same_tree.md",
    "chars": 1332,
    "preview": "# 100. same tree\n\n**<font color=red>难度: Easy</font>**\n\n## 刷题内容\n\n> 原题连接\n\n* https://leetcode.com/problems/same-tree/\n* \n> "
  },
  {
    "path": "docs/leetcode/cpp/0101._Symmetric_Tree.md",
    "chars": 1254,
    "preview": "# 101. Symmetric Tree\n\n**<font color=red>ѶEasy<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/symmetric-tree/\n\n> \n\n`"
  },
  {
    "path": "docs/leetcode/cpp/0102._Binary_Tree_Level_Order_Traversal.md",
    "chars": 994,
    "preview": "# 102. Binary Tree Level Order Traversal\n\n **<font color=red>难度: Medium</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode-"
  },
  {
    "path": "docs/leetcode/cpp/0104._Maximum_Depth_of_Binary_Tree.md",
    "chars": 1172,
    "preview": "# 104. Maximum Depth of Binary Tree\n\n**<font color=red>Ѷ:Easy<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/maximum"
  },
  {
    "path": "docs/leetcode/cpp/0105._Construct_Binary_Tree_from_Preorder_and_Inorder_Traversal.md",
    "chars": 1094,
    "preview": "# 105. Construct Binary Tree from Preorder and Inorder Traversal\n\n **<font color=red>难度: Medium</font>**\n\n ## 刷题内容\n\n > 原"
  },
  {
    "path": "docs/leetcode/cpp/0106._Construct_Binary_Tree_from_Inorder_and_Postorder_Traversal.md",
    "chars": 1178,
    "preview": "# 106. Construct Binary Tree from Inorder and Postorder Traversal\n\n **<font color=red>难度: Medium</font>**\n\n ## 原题内容\n\n > "
  },
  {
    "path": "docs/leetcode/cpp/0107._Binary_Tree_Level_Order_Traversal_II.md",
    "chars": 2622,
    "preview": "# 107.Binary Tree Level Order Traversal II\n\n**<font color=red>ѶEasy</font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/"
  },
  {
    "path": "docs/leetcode/cpp/0108._Convert_Sorted_Array_to_Binary_Search_Tree.md",
    "chars": 1481,
    "preview": "# 108. Convert Sorted Array to Binary Search Tree\n\n**<font color=red>Ѷ:Easy<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/pr"
  },
  {
    "path": "docs/leetcode/cpp/0109._Convert_Sorted_List_to_Binary_Search_Tree.md",
    "chars": 1096,
    "preview": "# 109. Convert Sorted List to Binary Search Tree\n\n **<font color=red>难度: Middle</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://l"
  },
  {
    "path": "docs/leetcode/cpp/0110._Balanced_Binary_Tree.md",
    "chars": 1290,
    "preview": "# 110.Balanced Binary Tree\n\n**<font color=red>ѶEasy</font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/balanced-binary-"
  },
  {
    "path": "docs/leetcode/cpp/0111._Minimum_Depth_Of_Binary_Tree.md",
    "chars": 823,
    "preview": "# 111. Minimum Depth of Binary Tree\n **<font color=red>难度: Easy</font>**\n## 刷题内容\n> 原题连接\n* https://leetcode-cn.com/proble"
  },
  {
    "path": "docs/leetcode/cpp/0112._Path_Sum.md",
    "chars": 1135,
    "preview": "# 112. Path Sum\n\n**<font color=red>Ѷ:Easy<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/path-sum/\n\n> \n\n```\nGiven a "
  },
  {
    "path": "docs/leetcode/cpp/0114._Flatten_Binary_Tree_to_Linked_List.md",
    "chars": 701,
    "preview": "# 114. Flatten Binary Tree to Linked List\n\n **<font color=red>难度: Middle</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode"
  },
  {
    "path": "docs/leetcode/cpp/0115._Distinct_Subsequences.md",
    "chars": 1765,
    "preview": "# 115.Distinct Subsequences\n\n**<font color=red>ѶHard</font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/distinct-subseq"
  },
  {
    "path": "docs/leetcode/cpp/0118._Pascals_Triangle.md",
    "chars": 1135,
    "preview": "## 118. Pascal's Triangle\n\n难度:Easy\n\n## 内容\n\n题目链接:https://leetcode.com/problems/pascals-triangle\n\nGiven a non-negative int"
  },
  {
    "path": "docs/leetcode/cpp/0119._Pascals_Triangle-II.md",
    "chars": 985,
    "preview": "## 119. Pascal's Triangle II\n\n难度:Easy\n\n## 内容\n\n题目链接:https://leetcode.com/problems/pascals-triangle-ii\n\nGiven a non-negati"
  },
  {
    "path": "docs/leetcode/cpp/0120._Triangle.md",
    "chars": 638,
    "preview": "# 120. Triangle\n\n **<font color=red>难度: Medium</font>**\n\n ## 刷题内容\n\n > 原题连接\n\n* https://leetcode-cn.com/problems/triangle/"
  },
  {
    "path": "docs/leetcode/cpp/0121._Best_Tim_to_Buy_and_Sell_Stock.md",
    "chars": 923,
    "preview": "# 121. Best Time to Buy and Sell Stock\n\n**<font color=red>ѶEasy<font>**\n\n## ˢ\n> ԭ\n\n* https://leetcode.com/problems/best-"
  }
]

// ... and 496 more files (download for full content)

About this extraction

This page contains the full source code of the apachecn/apachecn-algo-zh GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 696 files (1.2 MB), approximately 474.3k tokens, and a symbol index with 10 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!