- Notifications
You must be signed in to change notification settings - Fork38
interviewcoder/leetcode
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Solutions, unit tests, and code skeletons for problems fromLeetcode OJ. (in progress)
root |--- doc | |-- category.md // category for problems in leetcode | |-- problems.tsv // searchable tsv file listing problems from leetcode | |-- road.md // general things I learnt through the process |--- lib | |-- *.jar // jar file referenced in this project |--- src // solutions for problems | |-- _001_TwoSum | | |-- Practice.java // code skeleton | | |-- Solution.java | | |-- Solution*.java // other solutions for this problem | |-- ...... |--- test // unit tests | |-- _001_TwoSum | | |-- PracticeTest.java | | |-- SolutionTest.java | | |-- Solution*Test.java | |-- ......
- Discussions and code reviews are more than welcome.
Solution.java
provides OJ-accepted solution.Practice.java
provides code skeleton for each problemSolutionTest.java
andPracticeTest.java
provides basic unit tests to verify your solution.
P.S.:
- Please use Java 8 to compile and run
- Many solutions are from online sources, like Leetcode OJ discussion, coders' blogs, etc.
- Solution that passed unit tests does not guarantee to pass Leetcode OJ.
# | Problem | Difficulty | Tags | Note |
---|---|---|---|---|
001 | Two Sum | Medium | Array Hash Table | O(N^2) -> O(N) + O(N) hashtable |
002 | Add Two Numbers | Medium | Linked List Math | |
003 | Longest Substring Without Repeating Characters | Medium | Hash Table Two Pointers String | two pointers to keep window -> O(N) |
004 | Median of Two Sorted Arrays | Hard | Divide and Conquer Array Binary Search | |
005 | Longest Palindromic Substring | Medium | String | expanding two pointers |
006 | ZigZag Conversion | Easy | String | |
007 | Reverse Integer | Easy | Math | How to monitor Stack Overflow |
008 | String to Integer (atoi) | Easy | Math String | |
009 | Palindrome Number | Easy | Math | 1) count digits; 2) get digit from number's front/back; 3) to avoid StackOverflow, only reverse half part of number |
010 | Regular Expression Matching | Hard | Dynamic Programming Backtracking String | finite state machine! |
011 | Container With Most Water | Medium | Array Two Pointers | narrowing two pointers |
012 | Integer to Roman | Medium | Math String | |
013 | Roman to Integer | Easy | Math String | |
014 | Longest Common Prefix | Easy | String | |
015 | 3Sum | Medium | Array Two Pointers | sorting then 2sum |
016 | 3Sum Closest | Medium | Array Two Pointers | |
017 | Letter Combinations of a Phone Number | Medium | Backtracking String | BFS: iterative V.S. DFS: backtracking |
018 | 4Sum | Medium | Array Hash Table Two Pointers | |
019 | Remove Nth Node From End of List | Easy | Linked List Two Pointers | fast-slow two pointers on Linked List |
020 | Valid Parentheses | Easy | Stack String | stack basic, corner case |
021 | Merge Two Sorted Lists | Easy | Linked List | |
022 | Generate Parentheses | Medium | Backtracking String | BT template |
023 | Merge k Sorted Lists | Hard | Divide and Conquer Linked List Heap | |
024 | Swap Nodes in Pairs | Medium | Linked List | |
025 | Reverse Nodes in k-Group | Hard | Linked List | |
026 | Remove Duplicates from Sorted Array | Easy | Array Two Pointers | partition techinque on array |
027 | Remove Element | Easy | Array Two Pointers | |
028 | Implement strStr() | Easy | Two Pointers String | |
029 | Divide Two Integers | Medium | Math Binary Search | ! |
030 | Substring with Concatenation of All Words | Hard | Hash Table Two Pointers String | |
031 | Next Permutation | Medium | Array | |
032 | Longest Valid Parentheses | Hard | Dynamic Programming String | DP |
033 | Search in Rotated Sorted Array | Hard | Array Binary Search | |
034 | Search for a Range | Medium | Array Binary Search | ! one binary search to find start position, and another one find ending position |
035 | Search Insert Position | Medium | Array Binary Search | standard binary search with minor modification |
036 | Valid Sudoku | Easy | Hash Table | |
037 | Sudoku Solver | Hard | Backtracking Hash Table | |
038 | Count and Say | Easy | String | |
039 | Combination Sum | Medium | Array Backtracking | BT template + prune siblings |
040 | Combination Sum II | Medium | Array Backtracking | BT template + prune siblings + skip duplicate |
041 | First Missing Positive | Hard | Array | swap-until technique |
042 | Trapping Rain Water | Hard | Array Stack Two Pointers | !! |
043 | Multiply Strings | Medium | Math String | ! simulate multiplication |
044 | Wildcard Matching | Hard | Dynamic Programming Backtracking Greedy String | |
045 | Jump Game II | Hard | Array Greedy | |
046 | Permutations | Medium | Backtracking | backtrack template + select to add |
047 | Permutations II | Hard | Backtracking | backtrack template + select to add + skip duplicate using set |
048 | Rotate Image | Medium | Array | |
049 | Group Anagrams | Medium | Hash Table String | !! |
050 | Pow(x, n) | Medium | Math Binary Search | |
051 | N-Queens | Hard | Backtracking | |
052 | N-Queens II | Hard | Backtracking | |
053 | Maximum Subarray | Medium | Divide and Conquer Array Dynamic Programming | |
054 | Spiral Matrix | Medium | Array | |
055 | Jump Game | Medium | Array Greedy | |
056 | Merge Intervals | Hard | Array Sort | how to decide the boundary of merged interval |
057 | Insert Interval | Hard | Array Sort | ! enlarge to merge interval |
058 | Length of Last Word | Easy | String | |
059 | Spiral Matrix II | Medium | Array | |
060 | Permutation Sequence | Medium | Backtracking Math | |
061 | Rotate List | Medium | Linked List Two Pointers | fast-slow pointers; [189] Rotate Array |
062 | Unique Paths | Medium | Array Dynamic Programming | |
063 | Unique Paths II | Medium | Array Dynamic Programming | |
064 | Minimum Path Sum | Medium | Array Dynamic Programming | |
065 | Valid Number | Hard | Math String | |
066 | Plus One | Easy | Array Math | |
067 | Add Binary | Easy | Math String | add binary numbers |
068 | Text Justification | Hard | String | ! very careful string operations |
069 | Sqrt(x) | Medium | Math Binary Search | ! binary search along y-axle |
070 | Climbing Stairs | Easy | Dynamic Programming | |
071 | Simplify Path | Medium | Stack String | |
072 | Edit Distance | Hard | Dynamic Programming String | |
073 | Set Matrix Zeroes | Medium | Array | |
074 | Search a 2D Matrix | Medium | Array Binary Search | 2D coordidates --> 1D index |
075 | Sort Colors | Medium | Array Two Pointers Sort | |
076 | Minimum Window Substring | Hard | Hash Table Two Pointers String | ! [substring/sublist] hashing + two pointers -> O(N) |
077 | Combinations | Medium | Backtracking | |
078 | Subsets | Medium | Array Backtracking Bit Manipulation | seeREADME |
079 | Word Search | Medium | Array Backtracking | |
080 | Remove Duplicates from Sorted Array II | Medium | Array Two Pointers | from 2 to k (general) |
081 | Search in Rotated Sorted Array II | Medium | Array Binary Search | |
082 | Remove Duplicates from Sorted List II | Medium | Linked List | |
083 | Remove Duplicates from Sorted List | Easy | Linked List | |
084 | Largest Rectangle in Histogram | Hard | Array Stack | |
085 | Maximal Rectangle | Hard | Array Hash Table Stack Dynamic Programming | |
086 | Partition List | Medium | Linked List Two Pointers | |
087 | Scramble String | Hard | Dynamic Programming String | |
088 | Merge Sorted Array | Easy | Array Two Pointers | in-place merging -> from end to begin; two pointers on two lists |
089 | Gray Code | Medium | Backtracking | |
090 | Subsets II | Medium | Array Backtracking | backtrack template + skip duplicate |
091 | Decode Ways | Medium | Dynamic Programming String | |
092 | Reverse Linked List II | Medium | Linked List | |
093 | Restore IP Addresses | Medium | Backtracking String | |
094 | Binary Tree Inorder Traversal | Medium | Tree Hash Table Stack | |
095 | Unique Binary Search Trees II | Medium | Tree Dynamic Programming | |
096 | Unique Binary Search Trees | Medium | Tree Dynamic Programming | |
097 | Interleaving String | Hard | Dynamic Programming String | |
098 | Validate Binary Search Tree | Medium | Tree Depth-first Search | |
099 | Recover Binary Search Tree | Hard | Tree Depth-first Search | |
100 | Same Tree | Easy | Tree Depth-first Search | |
101 | Symmetric Tree | Easy | Tree Depth-first Search | |
102 | Binary Tree Level Order Traversal | Easy | Tree Breadth-first Search | |
103 | Binary Tree Zigzag Level Order Traversal | Medium | Tree Breadth-first Search Stack | |
104 | Maximum Depth of Binary Tree | Easy | Tree Depth-first Search | |
105 | Construct Binary Tree from Preorder and Inorder Traversal | Medium | Tree Array Depth-first Search | |
106 | Construct Binary Tree from Inorder and Postorder Traversal | Medium | Tree Array Depth-first Search | |
107 | Binary Tree Level Order Traversal II | Easy | Tree Breadth-first Search | |
108 | Convert Sorted Array to Binary Search Tree | Medium | Tree Depth-first Search | |
109 | Convert Sorted List to Binary Search Tree | Medium | Depth-first Search Linked List | |
110 | Balanced Binary Tree | Easy | Tree Depth-first Search | |
111 | Minimum Depth of Binary Tree | Easy | Tree Depth-first Search Breadth-first Search | |
112 | Path Sum | Easy | Tree Depth-first Search | |
113 | Path Sum II | Medium | Tree Depth-first Search | |
114 | Flatten Binary Tree to Linked List | Medium | Tree Depth-first Search | |
115 | Distinct Subsequences | Hard | Dynamic Programming String | |
116 | Populating Next Right Pointers in Each Node | Medium | Tree Depth-first Search | |
117 | Populating Next Right Pointers in Each Node II | Hard | Tree Depth-first Search | |
118 | Pascal's Triangle | Easy | Array | |
119 | Pascal's Triangle II | Easy | Array | |
120 | Triangle | Medium | Array Dynamic Programming | |
121 | Best Time to Buy and Sell Stock | Medium | Array Dynamic Programming | O(N^2) -> O(N) |
122 | Best Time to Buy and Sell Stock II | Medium | Array Greedy | |
123 | Best Time to Buy and Sell Stock III | Hard | Array Dynamic Programming | |
124 | Binary Tree Maximum Path Sum | Hard | Tree Depth-first Search | post-order, local and global ,README |
125 | Valid Palindrome | Easy | Two Pointers String | |
126 | Word Ladder II | Hard | Array Backtracking Breadth-first Search String | |
127 | Word Ladder | Medium | Breadth-first Search | |
128 | Longest Consecutive Sequence | Hard | Array | |
129 | Sum Root to Leaf Numbers | Medium | Tree Depth-first Search | |
130 | Surrounded Regions | Medium | Breadth-first Search | |
131 | Palindrome Partitioning | Medium | Backtracking | |
132 | Palindrome Partitioning II | Hard | Dynamic Programming | |
133 | Clone Graph | Medium | Depth-first Search Breadth-first Search Graph | DFS V.S.BFS |
134 | Gas Station | Medium | Greedy | |
135 | Candy | Hard | Greedy | |
136 | Single Number | Medium | Hash Table Bit Manipulation | |
137 | Single Number II | Medium | Bit Manipulation | |
138 | Copy List with Random Pointer | Hard | Hash Table Linked List | |
139 | Word Break | Medium | Dynamic Programming | |
140 | Word Break II | Hard | Dynamic Programming Backtracking | |
141 | Linked List Cycle | Medium | Linked List Two Pointers | |
142 | Linked List Cycle II | Medium | Linked List Two Pointers | |
143 | Reorder List | Medium | Linked List | |
144 | Binary Tree Preorder Traversal | Medium | Tree Stack | |
145 | Binary Tree Postorder Traversal | Hard | Tree Stack | |
146 | LRU Cache | Hard | Data Structure | |
147 | Insertion Sort List | Medium | Linked List Sort | |
148 | Sort List | Medium | Linked List Sort | ! fast-slow to find middle + iterative reverse + merge sort |
149 | Max Points on a Line | Hard | Hash Table Math | |
150 | Evaluate Reverse Polish Notation | Medium | Stack | |
151 | Reverse Words in a String | Medium | String | README |
152 | Maximum Product Subarray | Medium | Array Dynamic Programming | |
153 | Find Minimum in Rotated Sorted Array | Medium | Array Binary Search | |
154 | Find Minimum in Rotated Sorted Array II | Hard | Array Binary Search | |
155 | Min Stack | Easy | Stack Data Structure | |
157 | Read N Characters Given Read4 | Easy | String | |
158 | Read N Characters Given Read4 II | Hard | String | |
160 | Intersection of Two Linked Lists | Easy | Linked List | two pointers on two lists; combine long and short lists into one |
161 | One Edit Distance | Medium | String | |
162 | Find Peak Element | Medium | Array Binary Search | |
163 | Missing Ranges | Medium | Array | |
164 | Maximum Gap | Hard | Sort | |
165 | Compare Version Numbers | Easy | String | |
166 | Fraction to Recurring Decimal | Medium | Hash Table Math | |
168 | Excel Sheet Column Title | Easy | Math | convert decimal to other BASE system |
169 | Majority Element | Easy | Divide and Conquer Array Bit Manipulation | |
171 | Excel Sheet Column Number | Easy | Math | convert other BASE system to decimal system |
172 | Factorial Trailing Zeroes | Easy | Math | count the number of certain number (e.g. 5) in n! |
173 | Binary Search Tree Iterator | Medium | Tree Stack | |
174 | Dungeon Game | Hard | Dynamic Programming Binary Search | |
179 | Largest Number | Medium | Sort | |
186 | Reverse words in a string II | Medium | Array | two pass + include last position trick |
187 | Repeated DNA Sequences | Medium | Hash Table Bit Manipulation | |
188 | Best Time to Buy and Sell Stock IV | Hard | Dynamic Programming | |
189 | Rotate Array | Easy | Array | |
190 | Reverse Bits | Easy | Bit Manipulation | |
191 | Number of 1 Bits | Easy | Bit Manipulation | |
198 | House Robber | Easy | Dynamic Programming | |
199 | Binary Tree Right Side View | Medium | Tree Depth-first Search Breadth-first Search | |
200 | Number of Islands | Medium | Depth-first Search Breadth-first Search | |
201 | Bitwise AND of Numbers Range | Medium | Bit Manipulation | |
202 | Happy Number | Easy | Hash Table Math | |
203 | Remove Linked List Elements | Easy | Linked List | |
204 | Count Primes | Easy | Hash Table Math | sieve algorithm |
205 | Isomorphic Strings | Easy | Hash Table | |
206 | Reverse Linked List | Easy | Linked List | |
207 | Course Schedule | Medium | Depth-first Search Breadth-first Search Graph Topological Sort | |
208 | Implement Trie (Prefix Tree) | Medium | Data Structure Trie | |
209 | Minimum Size Subarray Sum | Medium | Array Two Pointers Binary Search | |
210 | Course Schedule II | Medium | Depth-first Search Breadth-first Search Graph Topological Sort | |
211 | Add and Search Word - Data structure design | Medium | Backtracking Data Structure Trie | |
212 | Word Search II | Hard | Backtracking Trie | |
213 | House Robber II | Medium | Dynamic Programming | |
214 | Shortest Palindrome | Hard | String | |
215 | Kth Largest Element in an Array | Medium | Divide and Conquer Heap | max-heap using Java's Priority Queue |
216 | Combination Sum III | Medium | Array Backtracking | |
217 | Contains Duplicate | Easy | Array Hash Table | |
218 | The Skyline Problem | Hard | Divide and Conquer Heap | |
219 | Contains Duplicate II | Easy | Array Hash Table | |
220 | Contains Duplicate III | Medium | Binary Search Tree | |
221 | Maximal Square | Medium | Dynamic Programming | |
222 | Count Complete Tree Nodes | Medium | Tree Binary Search | |
223 | Rectangle Area | Easy | Math | |
224 | Basic Calculator | Medium | Stack Math | |
225 | Implement Stack using Queues | Easy | Stack Data Structure | |
226 | Invert Binary Tree | Easy | Tree | |
227 | Basic Calculator II | Medium | String | |
228 | Summary Ranges | Easy | Array | |
229 | Majority Element II | Medium | Array | ! vote algorithm |
230 | Kth Smallest Element in a BST | Medium | Tree Binary Search | |
231 | Power of Two | Easy | Math Bit Manipulation | |
232 | Implement Queue using Stacks | Easy | Stack Data Structure | README |
233 | Number of Digit One | Medium | Math | |
234 | Palindrome Linked List | Easy | Linked List Two Pointers | |
235 | Lowest Common Ancestor of a Binary Search Tree | Easy | Tree | |
236 | Lowest Common Ancestor of a Binary Tree | Medium | Tree | README |
237 | Delete Node in a Linked List | Easy | Linked List | |
238 | Product of Array Except Self | Medium | Array | O(N^2) -> two pass O(N) |
239 | Sliding Window Maximum | Hard | Heap | descending queue |
240 | Search a 2D Matrix II | Medium | Divide and Conquer Binary Search | |
241 | Different Ways to Add Parentheses | Medium | Divide and Conquer | |
242 | Valid Anagram | Easy | Hash Table Sort | |
246 | Strobogrammatic Number | Easy | Hash Table Math | |
251 | Flatten2DVector | Medium | Design | |
252 | Meeting Rooms | Easy | Sort | |
253 | Meeting Rooms II | Medium | Heap Greedy Sort | |
256 | Paint House | Medium | Dynamic Programming | |
257 | Binary Tree Paths | Easy | Tree | |
258 | Add Digits | Easy | Math | |
260 | Single Number III | Medium | Bit Manipulation | |
261 | Graph Valid Tree | Medium | Breadth-first Search Depth-first Search Graph Union-Find | |
263 | Ugly Number | Easy | Math | |
264 | Ugly Number II | Medium | Math Heap | |
265 | Paint House | Hard | Dynamic Programming | |
268 | Missing Number | Medium | Array Math Bit Manipulation | |
269 | Alien Dictionary | Hard | Graph Topological Sort | BFS |
273 | Integer to English Words | Medium | Math String | |
274 | H-Index | Medium | Hash Table Sort | |
275 | H-Index II | Medium | Binary Search | |
278 | First Bad Version | Easy | Binary Search | |
279 | Perfect Squares | Medium | Dynamic Programming Breadth-first Search Math | |
282 | Expression Add Operators | Hard | Divide and Conquer | |
283 | Move Zeroes | Easy | Array Two Pointers | |
284 | Peeking Iterator | Medium | Design | |
285 | Inorder Successor in BST | Medium | Tree | |
286 | Walls And Gates | Medium | BFS | |
287 | Find the Duplicate Number | Hard | Array Two Pointers Binary Search | |
289 | Game of Life | Medium | Array | |
290 | Word Pattern | Easy | Hash Table |
About
Leetcode solutions, code skeletons, and unit tests in Java (in progress)
Resources
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
No releases published
Packages0
No packages published
Uh oh!
There was an error while loading.Please reload this page.