这个项目用于按专题刷 LeetCode Hot 100。
仓库地址:https://yukinoshitasherry.github.io/Leetcode/ (每次都看一遍这个仓库)
核心目标是:
- 每做一道题,先看对应的
README.md README.md里先把题意、思路、推导、代码讲透- 然后我再自己新建
.ipy文件手写一遍 - 最后我自己根据题目示例做手动测试
- 先阅读对应题目的
README.md - 理解题意、思路、边界条件和复杂度
- 在对应目录下自己新建一个
.ipy文件手写代码 - 按原题示例自己做手动测试
每道题都放在对应的专题下面,并且每道题使用独立文件夹。
专题/
└── 哈希/
└── 001-两数之和/
└── README.md
后续统一按这个格式扩展,例如:
专题/双指针/015-三数之和/README.md专题/滑动窗口/003-无重复字符的最长子串/README.md专题/二叉树/102-二叉树的层序遍历/README.md
从第 1 题开始,后续所有题目都要和 专题/哈希/001-两数之和/README.md 保持同一套风格和结构。
- 每道题必须放在对应专题下
- 每道题必须使用独立文件夹
- 文件夹命名统一为:
题号-题目名 - 每道题文件夹内至少包含一个
README.md .ipy文件用于我自己练习手写,不要求预先创建,也不是本项目当前阶段必须提交的内容
每道题的 README.md 都必须尽量保持和第一题一致,至少包含下面这些部分,并且顺序尽量一致:
- 题号 + 题目名
- 所属专题
- 题目描述
- 原题示例
- 题意理解
- 最直接的想法 / 暴力思路
- 优化思路 / 正解思路
- 用示例手推过程
- 为什么这样写
- 算法步骤
- 复杂度分析
- Python 参考实现(带非常详细的注释)
- 常见错误
- 适合自己默写的精简版本
- 一句话总结
- 文档是给“做题之前先阅读”用的,不是只放一个答案
- 解题思路要写得详细,不能只写结论
- 要把“为什么这样想”讲出来,而不只是“最后这样写”
- 代码部分要有非常详细的注释,方便读完后自己默写
- 尽量用清晰、直白、适合复习的中文表达
- 如果有关键细节、易错点、边界情况,要明确单独写出来
- README 中的示例优先使用原题自带示例
- 示例要按原题写清楚输入、输出、解释
- 不需要额外补自动化测试
- 也不需要在 README 中写测试代码
- 当前阶段只负责整理题解与示例,测试由我自己在
.ipy中完成
- 参考代码统一使用 Python
- 代码要可直接作为题解参考
- 注释要足够详细,适合看完后自己独立重写
- 同时保留一个“适合默写”的精简版本,方便二次练习
后续新增任何一道题时,都默认遵守下面规则:
- 先确定它属于哪个专题
- 在对应专题下新建
题号-题目名文件夹 - 在该文件夹下写
README.md - README 的结构、详细程度、代码注释风格,统一参照第一题
- 除非我单独提出要求,否则不额外写测试文件
- 除非我单独提出要求,否则不偏离这一套模板
- 基准样例:
专题/哈希/001-两数之和/README.md - 后续所有题解默认对齐这一题的组织方式和详略程度
- 已完成:
001-两数之和 - 已完成:
002-两数相加 - 已完成:
003-无重复字符的最长子串 - 已完成:
011-盛最多水的容器 - 已完成:
015-三数之和 - 已完成:
020-有效的括号 - 已完成:
021-合并两个有序链表 - 已完成:
031-下一个排列 - 已完成:
034-在排序数组中查找元素的第一个和最后一个位置 - 已完成:
043-字符串相乘 - 已完成:
046-全排列 - 已完成:
057-插入区间 - 已完成:
071-简化路径 - 已完成:
090-子集 II - 已完成:
094-二叉树的中序遍历 - 已完成:
098-验证二叉搜索树 - 已完成:
103-二叉树的锯齿形层序遍历 - 已完成:
124-二叉树中的最大路径和 - 已完成:
151-反转字符串中的单词 - 已完成:
160-相交链表 - 已完成:
215-数组中的第K个最大元素 - 已完成:
238-除自身以外数组的乘积 - 已完成:
260-只出现一次的数字 III - 已完成:
448-找到所有数组中消失的数字 - 后续继续在对应专题下新增题目文件夹即可