diff --git a/README.md b/README.md index 97cbc8f..5d5f113 100644 --- a/README.md +++ b/README.md @@ -1 +1,63 @@ -LeetCode solutions using Java \ No newline at end of file +# LeetCode Java Solutions + +A collection of LeetCode problem solutions implemented in Java with detailed complexity analysis and test coverage. + +## Migration Status + +🔄 **Currently migrating from old structure to new directory structure** + +This project is being reorganized. The following problems have been migrated to the new structure: + +- ✅ Migrated problems in `src/main/java/com/leetcode/` directory (51 problems listed below) +- ⏳ Legacy problems still being migrated + +## Project Structure + +``` +leetcode-java/ +├── src/ +│ ├── main/ +│ │ └── java/ +│ │ └── com/ +│ │ └── leetcode/ +│ │ ├── easy/ # Easy difficulty problems +│ │ ├── medium/ # Medium difficulty problems +│ │ ├── hard/ # Hard difficulty problems +│ │ └── datastructure/ # Data structure implementations +│ └── test/ +│ └── java/ +│ └── com/ +│ └── leetcode/ +│ ├── easy/ # Test cases for easy problems +│ ├── medium/ # Test cases for medium problems +│ └── hard/ # Test cases for hard problems +├── docs/ # Detailed problem lists by difficulty +├── pom.xml # Maven configuration +└── README.md # This file +``` + +Each problem follows this structure: +``` +{difficulty}/{ProblemName}{Number}.java # Solution implementation +{difficulty}/{ProblemName}{Number}Test.java # Test cases +``` + +## Solutions + +📊 **Statistics**: 51 problems solved (migrated to new structure) + +| Difficulty | Count | +|------------|-------| +| Easy | 35 | +| Medium | 15 | +| Hard | 1 | + +### Browse by Difficulty + +- 📗 [Easy Problems](docs/EASY.md) +- 📘 [Medium Problems](docs/MEDIUM.md) +- 📕 [Hard Problems](docs/HARD.md) + +## Author + +[Peter Chen](https://github.com/kobukuro) diff --git a/docs/EASY.md b/docs/EASY.md new file mode 100644 index 0000000..a3ac856 --- /dev/null +++ b/docs/EASY.md @@ -0,0 +1,47 @@ +# Easy Problems + +Total: 35 problems solved + +## Solutions + +| # | Title | Solution | Tests | +|---|-------|----------|-------| +| 1 | [Two Sum](https://leetcode.com/problems/two-sum/) | [TwoSum1.java](../src/main/java/com/leetcode/easy/TwoSum1.java) | [TwoSum1Test.java](../src/test/java/com/leetcode/easy/TwoSum1Test.java) | +| 20 | [Valid Parentheses](https://leetcode.com/problems/valid-parentheses/) | [ValidParentheses20.java](../src/main/java/com/leetcode/easy/ValidParentheses20.java) | [ValidParentheses20Test.java](../src/test/java/com/leetcode/easy/ValidParentheses20Test.java) | +| 70 | [Climbing Stairs](https://leetcode.com/problems/climbing-stairs/) | [ClimbingStairs70.java](../src/main/java/com/leetcode/easy/ClimbingStairs70.java) | [ClimbingStairs70Test.java](../src/test/java/com/leetcode/easy/ClimbingStairs70Test.java) | +| 88 | [Merge Sorted Array](https://leetcode.com/problems/merge-sorted-array/) | [MergeSortedArray88.java](../src/main/java/com/leetcode/easy/MergeSortedArray88.java) | [MergeSortedArray88Test.java](../src/test/java/com/leetcode/easy/MergeSortedArray88Test.java) | +| 100 | [Same Tree](https://leetcode.com/problems/same-tree/) | [SameTree100.java](../src/main/java/com/leetcode/easy/SameTree100.java) | [SameTree100Test.java](../src/test/java/com/leetcode/easy/SameTree100Test.java) | +| 141 | [Linked List Cycle](https://leetcode.com/problems/linked-list-cycle/) | [LinkedListCycle141.java](../src/main/java/com/leetcode/easy/LinkedListCycle141.java) | [LinkedListCycle141Test.java](../src/test/java/com/leetcode/easy/LinkedListCycle141Test.java) | +| 191 | [Number of 1 Bits](https://leetcode.com/problems/number-of-1-bits/) | [NumberOf1Bits191.java](../src/main/java/com/leetcode/easy/NumberOf1Bits191.java) | [NumberOf1Bits191Test.java](../src/test/java/com/leetcode/easy/NumberOf1Bits191Test.java) | +| 217 | [Contains Duplicate](https://leetcode.com/problems/contains-duplicate/) | [ContainsDuplicate217.java](../src/main/java/com/leetcode/easy/ContainsDuplicate217.java) | [ContainsDuplicate217Test.java](../src/test/java/com/leetcode/easy/ContainsDuplicate217Test.java) | +| 226 | [Invert Binary Tree](https://leetcode.com/problems/invert-binary-tree/) | [InvertBinaryTree226.java](../src/main/java/com/leetcode/easy/InvertBinaryTree226.java) | [InvertBinaryTree226Test.java](../src/test/java/com/leetcode/easy/InvertBinaryTree226Test.java) | +| 235 | [Lowest Common Ancestor of a Binary Search Tree](https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/) | [LowestCommonAncestorOfABinarySearchTree235.java](../src/main/java/com/leetcode/easy/LowestCommonAncestorOfABinarySearchTree235.java) | [LowestCommonAncestorOfABinarySearchTree235Test.java](../src/test/java/com/leetcode/easy/LowestCommonAncestorOfABinarySearchTree235Test.java) | +| 344 | [Reverse String](https://leetcode.com/problems/reverse-string/) | [ReverseString344.java](../src/main/java/com/leetcode/easy/ReverseString344.java) | [ReverseString344Test.java](../src/test/java/com/leetcode/easy/ReverseString344Test.java) | +| 383 | [Ransom Note](https://leetcode.com/problems/ransom-note/) | [RansomNote383.java](../src/main/java/com/leetcode/easy/RansomNote383.java) | [RansomNote383Test.java](../src/test/java/com/leetcode/easy/RansomNote383Test.java) | +| 412 | [Fizz Buzz](https://leetcode.com/problems/fizz-buzz/) | [FizzBuzz412.java](../src/main/java/com/leetcode/easy/FizzBuzz412.java) | [FizzBuzz412Test.java](../src/test/java/com/leetcode/easy/FizzBuzz412Test.java) | +| 509 | [Fibonacci Number](https://leetcode.com/problems/fibonacci-number/) | [FibonacciNumber509.java](../src/main/java/com/leetcode/easy/FibonacciNumber509.java) | [FibonacciNumber509Test.java](../src/test/java/com/leetcode/easy/FibonacciNumber509Test.java) | +| 572 | [Subtree of Another Tree](https://leetcode.com/problems/subtree-of-another-tree/) | [SubtreeOfAnotherTree572.java](../src/main/java/com/leetcode/easy/SubtreeOfAnotherTree572.java) | [SubtreeOfAnotherTree572Test.java](../src/test/java/com/leetcode/easy/SubtreeOfAnotherTree572Test.java) | +| 700 | [Search in a Binary Search Tree](https://leetcode.com/problems/search-in-a-binary-search-tree/) | [SearchInABinarySearchTree700.java](../src/main/java/com/leetcode/easy/SearchInABinarySearchTree700.java) | [SearchInABinarySearchTree700Test.java](../src/test/java/com/leetcode/easy/SearchInABinarySearchTree700Test.java) | +| 704 | [Binary Search](https://leetcode.com/problems/binary-search/) | [BinarySearch704.java](../src/main/java/com/leetcode/easy/BinarySearch704.java) | [BinarySearch704Test.java](../src/test/java/com/leetcode/easy/BinarySearch704Test.java) | +| 771 | [Jewels and Stones](https://leetcode.com/problems/jewels-and-stones/) | [JewelsAndStones771.java](../src/main/java/com/leetcode/easy/JewelsAndStones771.java) | [JewelsAndStones771Test.java](../src/test/java/com/leetcode/easy/JewelsAndStones771Test.java) | +| 929 | [Unique Email Addresses](https://leetcode.com/problems/unique-email-addresses/) | [UniqueEmailAddresses929.java](../src/main/java/com/leetcode/easy/UniqueEmailAddresses929.java) | [UniqueEmailAddresses929Test.java](../src/test/java/com/leetcode/easy/UniqueEmailAddresses929Test.java) | +| 977 | [Squares of a Sorted Array](https://leetcode.com/problems/squares-of-a-sorted-array/) | [SquaresOfASortedArray977.java](../src/main/java/com/leetcode/easy/SquaresOfASortedArray977.java) | [SquaresOfASortedArray977Test.java](../src/test/java/com/leetcode/easy/SquaresOfASortedArray977Test.java) | +| 112 | [Path Sum](https://leetcode.com/problems/path-sum/) | [PathSum112.java](../src/main/java/com/leetcode/easy/PathSum112.java) | [PathSum112Test.java](../src/test/java/com/leetcode/easy/PathSum112Test.java) | +| 1365 | [How Many Numbers Are Smaller Than the Current Number](https://leetcode.com/problems/how-many-numbers-are-smaller-than-the-current-number/) | [HowManyNumbersAreSmallerThanTheCurrentNumber1365.java](../src/main/java/com/leetcode/easy/HowManyNumbersAreSmallerThanTheCurrentNumber1365.java) | [HowManyNumbersAreSmallerThanTheCurrentNumber1365Test.java](../src/test/java/com/leetcode/easy/HowManyNumbersAreSmallerThanTheCurrentNumber1365Test.java) | +| 1436 | [Destination City](https://leetcode.com/problems/destination-city/) | [DestinationCity1436.java](../src/main/java/com/leetcode/easy/DestinationCity1436.java) | [DestinationCity1436Test.java](../src/test/java/com/leetcode/easy/DestinationCity1436Test.java) | +| 1603 | [Design Parking System](https://leetcode.com/problems/design-parking-system/) | [DesignParkingSystem1603.java](../src/main/java/com/leetcode/easy/DesignParkingSystem1603.java) | [DesignParkingSystem1603Test.java](../src/test/java/com/leetcode/easy/DesignParkingSystem1603Test.java) | +| 1662 | [Check If Two String Arrays are Equivalent](https://leetcode.com/problems/check-if-two-string-arrays-are-equivalent/) | [CheckIfTwoStringArraysAreEquivalent1662.java](../src/main/java/com/leetcode/easy/CheckIfTwoStringArraysAreEquivalent1662.java) | [CheckIfTwoStringArraysAreEquivalent1662Test.java](../src/test/java/com/leetcode/easy/CheckIfTwoStringArraysAreEquivalent1662Test.java) | +| 1672 | [Richest Customer Wealth](https://leetcode.com/problems/richest-customer-wealth/) | [RichestCustomerWealth1672.java](../src/main/java/com/leetcode/easy/RichestCustomerWealth1672.java) | [RichestCustomerWealth1672Test.java](../src/test/java/com/leetcode/easy/RichestCustomerWealth1672Test.java) | +| 1773 | [Count Items Matching a Rule](https://leetcode.com/problems/count-items-matching-a-rule/) | [CountItemsMatchingARule1773.java](../src/main/java/com/leetcode/easy/CountItemsMatchingARule1773.java) | [CountItemsMatchingARule1773Test.java](../src/test/java/com/leetcode/easy/CountItemsMatchingARule1773Test.java) | +| 1816 | [Truncate Sentence](https://leetcode.com/problems/truncate-sentence/) | [TruncateSentence1816.java](../src/main/java/com/leetcode/easy/TruncateSentence1816.java) | [TruncateSentence1816Test.java](../src/test/java/com/leetcode/easy/TruncateSentence1816Test.java) | +| 2011 | [Final Value of Variable After Performing Operations](https://leetcode.com/problems/final-value-of-variable-after-performing-operations/) | [FinalValueOfVariableAfterPerformingOperations2011.java](../src/main/java/com/leetcode/easy/FinalValueOfVariableAfterPerformingOperations2011.java) | [FinalValueOfVariableAfterPerformingOperations2011Test.java](../src/test/java/com/leetcode/easy/FinalValueOfVariableAfterPerformingOperations2011Test.java) | +| 2032 | [Two Out of Three](https://leetcode.com/problems/two-out-of-three/) | [TwoOutOfThree2032.java](../src/main/java/com/leetcode/easy/TwoOutOfThree2032.java) | [TwoOutOfThree2032Test.java](../src/test/java/com/leetcode/easy/TwoOutOfThree2032Test.java) | +| 2124 | [Check if All A's Appears Before All B's](https://leetcode.com/problems/check-if-all-as-appears-before-all-bs/) | [CheckIfAllAsAppearsBeforeAllBs2124.java](../src/main/java/com/leetcode/easy/CheckIfAllAsAppearsBeforeAllBs2124.java) | [CheckIfAllAsAppearsBeforeAllBs2124Test.java](../src/test/java/com/leetcode/easy/CheckIfAllAsAppearsBeforeAllBs2124Test.java) | +| 2315 | [Count Asterisks](https://leetcode.com/problems/count-asterisks/) | [CountAsterisks2315.java](../src/main/java/com/leetcode/easy/CountAsterisks2315.java) | [CountAsterisks2315Test.java](../src/test/java/com/leetcode/easy/CountAsterisks2315Test.java) | +| 2469 | [Convert the Temperature](https://leetcode.com/problems/convert-the-temperature/) | [ConvertTheTemperature2469.java](../src/main/java/com/leetcode/easy/ConvertTheTemperature2469.java) | [ConvertTheTemperature2469Test.java](../src/test/java/com/leetcode/easy/ConvertTheTemperature2469Test.java) | +| 2798 | [Number of Employees Who Met the Target](https://leetcode.com/problems/number-of-employees-who-met-the-target/) | [NumberOfEmployeesWhoMetTheTarget2798.java](../src/main/java/com/leetcode/easy/NumberOfEmployeesWhoMetTheTarget2798.java) | [NumberOfEmployeesWhoMetTheTarget2798Test.java](../src/test/java/com/leetcode/easy/NumberOfEmployeesWhoMetTheTarget2798Test.java) | +| 3289 | [The Two Sneaky Numbers of Digitville](https://leetcode.com/problems/the-two-sneaky-numbers-of-digitville/) | [TheTwoSneakyNumbersOfDigitville3289.java](../src/main/java/com/leetcode/easy/TheTwoSneakyNumbersOfDigitville3289.java) | [TheTwoSneakyNumbersOfDigitville3289Test.java](../src/test/java/com/leetcode/easy/TheTwoSneakyNumbersOfDigitville3289Test.java) | + +--- + +[← Back to Main README](../README.md) diff --git a/docs/HARD.md b/docs/HARD.md new file mode 100644 index 0000000..228e543 --- /dev/null +++ b/docs/HARD.md @@ -0,0 +1,13 @@ +# Hard Problems + +Total: 1 problem solved + +## Solutions + +| # | Title | Solution | Tests | +|---|-------|----------|-------| +| 329 | [Longest Increasing Path in a Matrix](https://leetcode.com/problems/longest-increasing-path-in-a-matrix/) | [LongestIncreasingPathInAMatrix329.java](../src/main/java/com/leetcode/hard/LongestIncreasingPathInAMatrix329.java) | [LongestIncreasingPathInAMatrix329Test.java](../src/test/java/com/leetcode/hard/LongestIncreasingPathInAMatrix329Test.java) | + +--- + +[← Back to Main README](../README.md) diff --git a/docs/MEDIUM.md b/docs/MEDIUM.md new file mode 100644 index 0000000..5996007 --- /dev/null +++ b/docs/MEDIUM.md @@ -0,0 +1,27 @@ +# Medium Problems + +Total: 15 problems solved + +## Solutions + +| # | Title | Solution | Tests | +|---|-------|----------|-------| +| 3 | [Longest Substring Without Repeating Characters](https://leetcode.com/problems/longest-substring-without-repeating-characters/) | [LongestSubstringWithoutRepeatingCharacters3.java](../src/main/java/com/leetcode/medium/LongestSubstringWithoutRepeatingCharacters3.java) | [LongestSubstringWithoutRepeatingCharacters3Test.java](../src/test/java/com/leetcode/medium/LongestSubstringWithoutRepeatingCharacters3Test.java) | +| 11 | [Container With Most Water](https://leetcode.com/problems/container-with-most-water/) | [ContainerWithMostWater11.java](../src/main/java/com/leetcode/medium/ContainerWithMostWater11.java) | [ContainerWithMostWater11Test.java](../src/test/java/com/leetcode/medium/ContainerWithMostWater11Test.java) | +| 56 | [Merge Intervals](https://leetcode.com/problems/merge-intervals/) | [MergeIntervals56.java](../src/main/java/com/leetcode/medium/MergeIntervals56.java) | [MergeIntervals56Test.java](../src/test/java/com/leetcode/medium/MergeIntervals56Test.java) | +| 62 | [Unique Paths](https://leetcode.com/problems/unique-paths/) | [UniquePaths62.java](../src/main/java/com/leetcode/medium/UniquePaths62.java) | [UniquePaths62Test.java](../src/test/java/com/leetcode/medium/UniquePaths62Test.java) | +| 79 | [Word Search](https://leetcode.com/problems/word-search/) | [WordSearch79.java](../src/main/java/com/leetcode/medium/WordSearch79.java) | [WordSearch79Test.java](../src/test/java/com/leetcode/medium/WordSearch79Test.java) | +| 102 | [Binary Tree Level Order Traversal](https://leetcode.com/problems/binary-tree-level-order-traversal/) | [BinaryTreeLevelOrderTraversal102.java](../src/main/java/com/leetcode/medium/BinaryTreeLevelOrderTraversal102.java) | [BinaryTreeLevelOrderTraversal102Test.java](../src/test/java/com/leetcode/medium/BinaryTreeLevelOrderTraversal102Test.java) | +| 113 | [Path Sum II](https://leetcode.com/problems/path-sum-ii/) | [PathSumII113.java](../src/main/java/com/leetcode/medium/PathSumII113.java) | [PathSumII113Test.java](../src/test/java/com/leetcode/medium/PathSumII113Test.java) | +| 198 | [House Robber](https://leetcode.com/problems/house-robber/) | [HouseRobber198.java](../src/main/java/com/leetcode/medium/HouseRobber198.java) | [HouseRobber198Test.java](../src/test/java/com/leetcode/medium/HouseRobber198Test.java) | +| 200 | [Number of Islands](https://leetcode.com/problems/number-of-islands/) | [NumberOfIslands200.java](../src/main/java/com/leetcode/medium/NumberOfIslands200.java) | [NumberOfIslands200Test.java](../src/test/java/com/leetcode/medium/NumberOfIslands200Test.java) | +| 207 | [Course Schedule](https://leetcode.com/problems/course-schedule/) | [CourseSchedule207.java](../src/main/java/com/leetcode/medium/CourseSchedule207.java) | [CourseSchedule207Test.java](../src/test/java/com/leetcode/medium/CourseSchedule207Test.java) | +| 230 | [Kth Smallest Element in a BST](https://leetcode.com/problems/kth-smallest-element-in-a-bst/) | [KthSmallestElementInABST230.java](../src/main/java/com/leetcode/medium/KthSmallestElementInABST230.java) | [KthSmallestElementInABST230Test.java](../src/test/java/com/leetcode/medium/KthSmallestElementInABST230Test.java) | +| 236 | [Lowest Common Ancestor of a Binary Tree](https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/) | [LowestCommonAncestorOfABinaryTree236.java](../src/main/java/com/leetcode/medium/LowestCommonAncestorOfABinaryTree236.java) | [LowestCommonAncestorOfABinaryTree236Test.java](../src/test/java/com/leetcode/medium/LowestCommonAncestorOfABinaryTree236Test.java) | +| 322 | [Coin Change](https://leetcode.com/problems/coin-change/) | [CoinChange322.java](../src/main/java/com/leetcode/medium/CoinChange322.java) | [CoinChange322Test.java](../src/test/java/com/leetcode/medium/CoinChange322Test.java) | +| 695 | [Max Area of Island](https://leetcode.com/problems/max-area-of-island/) | [MaxAreaOfIsland695.java](../src/main/java/com/leetcode/medium/MaxAreaOfIsland695.java) | [MaxAreaOfIsland695Test.java](../src/test/java/com/leetcode/medium/MaxAreaOfIsland695Test.java) | +| 2043 | [Bank System Summary](https://leetcode.com/problems/bank-system-summary/) | [Bank2043.java](../src/main/java/com/leetcode/medium/Bank2043.java) | [Bank2043Test.java](../src/test/java/com/leetcode/medium/Bank2043Test.java) | + +--- + +[← Back to Main README](../README.md)