LeetCode-Solution

March 23, 2020 · View on GitHub

本仓库为LeetCode练习题题解记录,会持续更新各种语言的题解。同时也欢迎使用各种语言的同♂好们加入此项目,为开源贡献力量。

LeetCode is the best platform to help you enhance your skills, expand your knowledge and prepare for technical interviews.

如果想知道各大公司 LeetCode 面试题,可以参看 Companies.md

附上@Blankj的镇楼诗:

明有科举八股,今有 LeetCode。
八股定格式而取文采心意,LeetCode 定题目且重答案背诵。
美其名曰:"practice makes perfect."
为何今不如古?
非也非也,
科举为国取士,LeetCode 为 Google 筛码工,各取所需也。

目录

题解汇总

题目题解难度JavaJavaScriptkotlin
001Two SumEasy
002Add Two NumbersMedium
003Longest Substring Without Repeating CharactersMedium
004Median of Two Sorted ArraysHard
005Longest Palindromic SubstringMedium
006ZigZag ConversionMedium
007Reverse IntegerEasy
008String to Integer (atoi)Medium
009Palindrome NumberEasy
010Regular Expression MatchingHard
011Container With Most WaterMedium
012Integer to RomanMedium
013Roman to IntegerEasy
014Longest Common PrefixEasy
0153SumMedium
0163Sum ClosestMedium
017Letter Combinations of a Phone NumberMedium
0184SumMedium
019Remove Nth Node From End of ListMedium
020Valid ParenthesesEasy
021Merge Two Sorted ListsEasy
022Generate ParenthesesMedium
023Merge k Sorted ListsHard
024Swap Nodes in PairsMedium
025Reverse Nodes in k-GroupHard
026Remove Duplicates from Sorted ArrayEasy
027Remove ElementEasy
028Implement strStr()Easy
029Divide Two IntegersMedium
030Substring with Concatenation of All WordsHard
033Search in Rotated Sorted ArrayMedium
035Search Insert PositionEasy
038Count and SayEasy
043Multiply StringsMedium
044Wildcard MatchingHard
049Group AnagramsMedium
050Pow(x, n)Medium
053Maximum SubarrayEasy
056Merge IntervalsMedium
057Insert IntervalHard
058Length of Last WordEasy
066Plus OneEasy
067Add BinaryEasy
068Text JustificationHard
069Sqrt(x)Easy
070Climbing StairsEasy
083Remove Duplicates from Sorted ListEasy
088Merge Sorted ArrayEasy
100Same TreeEasy
101Symmetric TreeEasy
104Maximum Depth of Binary TreeEasy
107Binary Tree Level Order Traversal IIEasy
108Convert Sorted Array to Binary Search TreeEasy
110Balanced Binary TreeEasy
111Minimum Depth of Binary TreeEasy
112Path SumEasy
118Pascal's TriangleEasy
119Pascal's Triangle IIEasy
121Best Time to Buy and Sell StockEasy
122Best Time to Buy and Sell Stock IIEasy
125Valid PalindromeEasy
136Single NumberEasy
141Linked List CycleEasy-
155Min StackEasy
160Intersection of Two Linked ListsEasy-
167Two Sum II - Input array is sortedEasy-
168Excel Sheet Column TitleEasy-
169Majority ElementEasy-
171excel-sheet-column-numberEasy-
226Invert Binary TreeEasy
504Base 7Easy
543Diameter of Binary TreeEasy
554Brick WallMedium
561Array Partition IEasy
643Maximum Average Subarray IEasy
645Set MismatchEasy
653Two Sum IV - Input is a BSTEasy
657Judge Route CircleEasy
661Image SmootherEasy
665Non-decreasing ArrayEasy
669Trim a Binary Search TreeEasy
671Second Minimum Node In a Binary TreeEasy
674Longest Continuous Increasing SubsequenceEasy
680Valid Palindrome IIEasy
682Baseball GameEasy
686Repeated String MatchEasy
687Longest Univalue PathEasy
693Binary Number with Alternating BitsEasy
695Max Area of IslandEasy
696Count Binary SubstringsEasy
697Degree of an ArrayEasy
7171-bit and 2-bit CharactersEasy
720Longest Word in DictionaryEasy
724Find Pivot IndexEasy
728Self Dividing NumbersEasy
733Flood FillEasy
744Find Smallest Letter Greater Than TargetEasy
746Min Cost Climbing StairsEasy
747Largest Number At Least Twice of OthersEasy
762Prime Number of Set Bits in Binary RepresentationEasy
766Toeplitz MatrixEasy
771Jewels and StonesEasy
783Minimum Distance Between BST NodesEasy
784Letter Case PermutationEasy
788Rotated DigitsEasy
796Rotate StringEasy
804Unique Morse Code WordsEasy
806Number of Lines To Write StringEasy

库维护须知

请大家遵守规范,勤加维护。对规范有异议可以提出意见,经过讨论,并落地合理的规范。

注: 为方便阐述规范,以下内容以“使用Java语言解答第001题-Two Sum”为例进行说明。

本仓库的起源

为避免误解,以下称RichCodersAndMe/LeetCode-Solution本仓库, 被介绍的仓库称为此仓库

来源1: @Blankjawsome-java-leetcode

此仓库@Blankj于2017年4月18日创建, 不定期更新优质Java代码和题解,颇受好评,至今已有star数3521颗(star数量以仓库原址为准)。截止本仓库建立为止, 此仓库已累计拥有63题已AC的Java代码。

来源2: @Wang-YSleetcode

此仓库@Wang-YS于2018年2月28日创建,不定期更新优质JavaScript代码,属于个人练习项目。截止本仓库建立为止, 此仓库已累计拥有33题已AC的JavaScript代码。

来源3 @CodeAntStudioLeetCode-Solution

此仓库@Mukyu@Taryn@WangXin于2018年3月31日创建,由@Mukyu提供Java题解,@Taryn提供JavaScript题解,@WangXin提供kotlin题解,属于刚刚萌生想法的而创建的新仓库。截止本仓库建立为止, 此仓库已累计拥有5题已AC的Java代码、2题已AC的JavaScript代码、3题已AC的kotlin代码。

文档编写规范

举例说明:
当提交首页表格未收录的题目时:

  • 1 需提交对应解题代码->./src/_001/Solution.java
  • 2 对应的题目题解markdown文件(此文件填写规范参看题解模板)->./tips/001/README.md
  • 3 在首页README.md对应的位置添加记录
    • 3.1 根据题目难度(Easy、Medium、Hard),在对应的表格内的对应位置(根据题号排序)添加行
    • 3.2 添加原题地址(001-question: https://leetcode.com/problems/two-sum)
    • 3.3 添加题解地址 (001-tips: ./tips/001/README.md)
    • 3.4 添加原题对应的Tags(就是在原题网页偏右下位置的Related Topics
    • 3.5 添加代码地址 (001-java: ./src/_001/Solution.java)
      (注: 同名的kotlin与Java类在同一个目录下会冲突,故kotlin放在更深一层的kotlin文件夹中:./src/_001/kotlin/Solution.kt)

总而言之三步走: 代码题解首页README.md

commit信息提交规范

feat:提交新的AC代码
fix:修补bug
docs:文档修改
style: 格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
chore:构建过程或辅助工具的变动

基本可以按照上述情况对号入座, 还是不明白的参看历史提交记录(git log)。

commit前先pull, 尽量避免产生不必要的git分叉.

commit信息模板: feat: add the solution of `Two Sum`(001) with Java

添加新语言代码

目前已使用的代码有: JavaJavaScriptkotlin 添加新的语言的解题代码, 请按字母序排列,在对应列添加解题代码且附链接,文档编写相关细节参看commit信息提交规范

其他问题

1 同题的同种语言的代码如何处理?

建议保留一份即可(优先保留高效代码), 如果有更好/值得一说的思路,可以在题解中体现。 如果非要保留自己的代码, 请遵守以下规则:

  • 首页README.md优先使用最优解的代码链接,认为最优解可以进一步优化或有更好的解法时,可通过提Issue的方式进行讨论和决定。
  • 如果同语言代码思路不同可以在题解文档内阐述思路,若思路相同,则不再赘述。
  • 文件名则改为: Solution1.javaSolution2.javaSolution3.java,以此类推。

2 未完善的题解

目前存在大量未完善的题解, 原因是@Wang-YS大佬的原仓库没有写题解,只有已AC的js代码。 大概分散在561~804题。那个啥,大家努力完善吧。

贡献者名单

排名不分先后

  • 感谢@Mukyu, 提供Java题解。
  • 感谢@Taryn, 提供JavaScript题解。
  • 感谢@Wang-YS, 提供JavaScrip代码。
  • 感谢@Blankj, 提供Java题解、镇楼诗文档编写规范
  • 感谢@WangXin, 提供kotlin代码、文档整理库维护规范