Skip to content

⛽️「算法通关手册」,超详细的「算法与数据结构」基础讲解教程,700+ 道「LeetCode 题目」详细解析。通过「算法理论学习」和「编程实战练习」相结合的方式,从零基础到彻底掌握算法知识。

License

Notifications You must be signed in to change notification settings

qqjjtt/LeetCode-Py

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LeetCode-Py

LeetCode 题解, Solutions to LeetCode by Python

LeetCode 刷题顺序和技巧

1. LeetCode 刷题顺序

如果是新手刷题的话,推荐先从简单等级的算法题开始刷起。等简单题上手熟练之后,再开始按照标签类别,刷中等难度的题。中等难度的题刷差不多之后,可以考虑刷面试题 or 难题。

其实 LeetCode 官方网站上就有整理好的刷题清单。链接为:https://leetcode-cn.com/leetbook/

我这里稍微做了一下整理。推荐刷题顺序如下:

  1. 初级算法
  2. 数组类算法
  3. 数组和字符串
  4. 链表类算法
  5. 哈希表
  6. 队列 & 栈
  7. 递归
  8. 二分查找
  9. 二叉树
  10. 中级算法
  11. 高级算法
  12. 算法面试题汇总

2. LeetCode 刷题技巧

2.1 「5 分钟思考法」

「5 分钟思考法」意思就是如果一道题如果 5 分钟之内有思路,就立即动手解题。如果 5 分钟之后还没有思路,就直接去看题解。然后根据题解的思路,自己去实现代码。如果发现自己看了题解也无法实现代码,就认真阅读题解的代码,并理解代码的逻辑。

刷题其实跟英语里边的背单词过程是类似的。

一开始,先学简单的单词,掌握了基本词汇之后,再学习词组,学习句子,然后再看文章。而且,背单词的时候也不是背一遍就会了。而是不断的重复记忆。

算法刷题也是一样,零基础刷题的时候,不要过分纠结怎么自己就想不出来算法的解法,怎么就想不到更加高效的方法。学英语的时候,不也是从第一个字母开始学起的嘛。

一开始的时候,不会做的题就去看题解,尽可能的快速入门。

2.2 「重复刷题」

算法题有时候一遍刷过去,过的时间长了可能就忘了,看到之前做的题不能够立马想到解题思路。这其实还是跟背单词一样,单词也不是看一遍就完全记住了。所以题目刷完一遍并不是结束了,还需要不断的回顾。

而且,一道题目可能有多种解法,还可能有复杂度更低的算法思路。

最开始做的时候,可能是一种思路,再做第二遍的时候,可能会想到了新的解法,新的优化方式等等。

所以,算法题一遍之后遇见不会的,还可以多刷几遍,不断加深理解。

2.3 「写解题报告」

刷算法题,有一个十分有用的捷径,就是「写解题报告」。如果你刷完一道题,能把这道题的解题步骤,做题思路用通俗易懂的话写成解题报告,那么这道题就算是掌握了。其实就相当于「费曼学习法」的思维。这样,也可以减少刷题的遍数,遇到之前刷过的题,但一时之间没有思路的,可以看看自己之前的解题报告。这样就节省了大量重复刷题的时间。

3. LeetCode 题解(已解决 211 道)

题号 标题 题解 标签 难度
0001 两数之和 Python 数组、哈希表 简单
0002 两数相加 Python 递归、链表、数学 中等
0003 无重复字符的最长子串 Python 字符串、哈希表、双指针、字符串、滑动窗口 中等
0004 寻找两个正序数组的中位数 Python 数组、二分查找、分治算法 困难
0005 最长回文子串 Python 字符串、动态规划 中等
0007 整数反转 Python 数学 简单
0008 字符串转换整数 (atoi) Python 数学、字符串 中等
0009 回文数 Python 数学 简单
0012 整数转罗马数字 Python 数学、字符串 中等
0013 罗马数字转整数 Python 数学、字符串 简单
0014 最长公共前缀 Python 字符串 简单
0015 三数之和 Python 数组、双指针 中等
0017 电话号码的字母组合 Python 深度优先搜索、递归、字符串、回溯算法 中等
0018 四数之和 Python 数组、哈希表、双指针 中等
0019 删除链表的倒数第 N 个结点 Python 链表、双指针 中等
0020 有效的括号 Python 栈、字符串 简单
0021 合并两个有序链表 Python 递归、链表 简单
0022 括号生成 Python 字符串、回溯算法 中等
0024 两两交换链表中的节点 Python 递归、链表 中等
0026 删除有序数组中的重复项 Python 数组、双指针 简单
0027 移除元素 Python 数组、双指针 简单
0028 实现 strStr() Python 字符串、双指针 简单
0029 两数相除 Python 数学、二分查找 中等
0034 在排序数组中查找元素的第一个和最后一个位置 Python 数组、二分查找 中等
0035 搜索插入位置 Python 数组、二分查找 简单
0036 有效的数独 Python 哈希表 中等
0038 外观数列 Python 字符串 简单
0046 全排列 Python 回溯算法 中等
0048 旋转图像 Python 数组 中等
0049 字母异位词分组 Python 字符串、哈希表 中等
0050 Pow(x, n) Python 数学、二分查找 中等
0053 最大子序和 Python 数组、分治算法、动态规划 简单
0054 螺旋矩阵 Python 数组 中等
0055 跳跃游戏 Python 贪心算法、数组、动态规划 中等
0056 合并区间 Python 数组、排序 中等
0058 最后一个单词的长度 Python 字符串 简单
0061 旋转链表 Python 链表、双指针 中等
0062 不同路径 Python 数组、动态规划 中等
0066 加一 Python 数组 简单
0067 二进制求和 Python 数学、字符串、位运算 简单
0069 x 的平方根 Python 数学、二分查找 简单
0070 爬楼梯 Python 动态规划 简单
0073 矩阵置零 Python 数组 中等
0075 颜色分类 Python 数组、排序、双指针 中等
0078 子集 Python 位运算、数组、回溯算法 中等
0079 单词搜索 Python 数组、回溯算法 中等
0080 删除有序数组中的重复项 II Python 数组、双指针 中等
0083 删除排序链表中的重复元素 Python 链表 简单
0088 合并两个有序数组 Python 数组、双指针 简单
0091 解码方法 Python 字符串、动态规划 中等
0094 二叉树的中序遍历 Python 栈、树、哈希表 简单
0098 验证二叉搜索树 Python 树、深度优先搜索、递归 中等
0100 相同的树 Python 树、深度优先搜索 简单
0101 对称二叉树 Python 树、深度优先搜索、广度优先搜索 简单
0102 二叉树的层序遍历 Python 树、广度优先搜索 中等
0103 二叉树的锯齿形层序遍历 Python 简单
0104 二叉树的最大深度 Python 树、深度优先搜索、递归 简单
0107 二叉树的层序遍历 II Python 树、广度优先搜索 中等
0108 将有序数组转换为二叉搜索树 Python 树、深度优先搜索 简单
0110 平衡二叉树 Python 树、深度优先搜索、递归 简单
0111 二叉树的最小深度 Python 树、深度优先搜索、广度优先搜索 简单
0112 路径总和 Python 树、深度优先搜索 简单
0116 填充每个节点的下一个右侧节点指针 Python 树、深度优先搜索、广度优先搜索 中等
0117 填充每个节点的下一个右侧节点指针 II Python 树、深度优先遍历 中等
0118 杨辉三角 Python 数组 简单
0119 杨辉三角 II Python 数组 简单
0121 买卖股票的最佳时机 Python 数组、动态规划 简单
0122 买卖股票的最佳时机 II Python 数组、贪心算法 简单
0125 验证回文串 Python 字符串、双指针 简单
0133 克隆图 Python 深度优先搜索、广度优先搜索、图 中等
0136 只出现一次的数字 Python 位运算、位运算 简单
0138 复制带随机指针的链表 Python 链表、哈希表 中等
0141 环形链表 Python 链表、双指针 简单
0142 环形链表 II Python 链表、双指针 中等
0144 二叉树的前序遍历 Python 栈、树 中等
0145 二叉树的后序遍历 Python 栈、树 简单
0149 直线上最多的点数 Python 哈希表、数学 困难
0150 逆波兰表达式求值 Python 中等
0152 乘积最大子数组 Python 数组、动态规划 中等
0153 寻找旋转排序数组中的最小值 Python 数组、二分查找 中等
0155 最小栈 Python 栈、设计 简单
0159 至多包含两个不同字符的最长子串 Python 哈希表、双指针、字符串、滑动窗口 中等
0160 相交链表 Python 链表、双指针 简单
0166 分数到小数 Python 哈希表、数学 中等
0167 两数之和 II - 输入有序数组 Python 数组、双指针、二分查找 简单
0168 Excel表列名称 Python 数学 简单
0169 多数元素 Python 数组、哈希表 简单
0170 两数之和 III - 数据结构设计 Python 设计、哈希表 简单
0173 二叉搜索树迭代器 Python 栈、树、设计 中等
0189 旋转数组 Python 数组 中等
0190 颠倒二进制位 Python 位运算 简单
0191 位1的个数 Python 位运算 简单
0198 打家劫舍 Python 动态规划 中等
0199 二叉树的右视图 Python 树、深度优先搜索、广度优先搜索、递归、队列 中等
0200 岛屿数量 Python 搜索 中等
0202 快乐数 Python 哈希表、数学 简单
0203 移除链表元素 Python 链表 简单
0204 计数质数 Python 数学、哈希表 简单
0205 同构字符串 Python 哈希表 简单
0206 反转链表 Python 链表 简单
0209 长度最小的子数组 Python 数组、双指针、二分查找 中等
0213 打家劫舍 II Python 动态规划 中等
0215 数组中的第K个最大元素 Python 数组、堆排序 中等
0217 存在重复元素 Python 数组、哈希表 简单
0219 存在重复元素 II Python 数组、哈希表 简单
0220 存在重复元素 III Python 排序、有序集合、哈希表 中等
0223 矩形面积 Python 数学 简单
0225 用队列实现栈 Python 栈、设计 简单
0226 翻转二叉树 Python 树、递归 简单
0227 基本计算器 II Python 栈、字符串 中等
0231 2的幂 Python 位运算、数学 简单
0232 用栈实现队列 Python 栈、设计 简单
0234 回文链表 Python 链表、双指针 简单
0235 二叉搜索树的最近公共祖先 Python 简单
0236 二叉树的最近公共祖先 Python 中等
0237 删除链表中的节点 Python 链表 简单
0238 除自身以外数组的乘积 Python 数组 中等
0240 搜索二维矩阵 II Python 二分查找、分治算法 中等
0242 有效的字母异位词 Python 字符串、哈希表、排序 简单
0249 移位字符串分组 Python 哈希表、字符串 中等
0257 二叉树的所有路径 Python 树、深度优先搜索 简单
0258 各位相加 Python 数学 简单
0268 丢失的数字 Python 位运算、数组、数学 简单
0270 最接近的二叉搜索树值 Python 树、二分查找 简单
0278 第一个错误的版本 Python 数组、二分查找 简单
0279 完全平方数 Python 广度优先搜索、数学、动态规划 中等
0283 移动零 Python 数组、双指针 简单
0286 墙与门 Python 广度优先搜索 中等
0287 寻找重复数 Python 数组、双指针、二分查找 中等
0288 单词的唯一缩写 Python 设计、哈希表 中等
0290 单词规律 Python 哈希表 简单
0292 Nim 游戏 Python 数学 简单
0297 二叉树的序列化与反序列化 Python 树、设计 困难
0300 最长递增子序列 Python 二分查找、动态规划 中等
0322 零钱兑换 Python 动态规划 中等
0326 3 的幂 Python 数学 简单
0328 奇偶链表 Python 链表 中等
0334 递增的三元子序列 Python 中等
0342 4的幂 Python 位运算 简单
0344 反转字符串 Python 字符串 简单
0345 反转字符串中的元音字母 Python 字符串 简单
0347 前 K 个高频元素 Python 堆、哈希表 中等
0349 两个数组的交集 Python 数组、哈希表 简单
0350 两个数组的交集 II Python 数组、哈希表 简单
0354 俄罗斯套娃信封问题 Python 动态规划、二分查找 困难
0359 日志速率限制器 Python 设计、哈希表 简单
0367 有效的完全平方数 Python 数学、二分查找 简单
0371 两整数之和 Python 位运算 中等
0374 猜数字大小 Python 二分查找 简单
0380 常数时间插入、删除和获取随机元素 Python 数组、哈希表 中等
0387 字符串中的第一个唯一字符 Python 字符串、哈希表 简单
0389 找不同 Python 位运算、哈希表 简单
0394 字符串解码 Python 栈、深度优先搜索 中等
0404 左叶子之和 Python 简单
0410 分割数组的最大值 Python 二分查找、动态规划 困难
0412 Fizz Buzz Python 简单
0415 字符串相加 Python 字符串、大数加法 简单
0424 替换后的最长重复字符 Python 双指针、滑动窗口 中等
0430 扁平化多级双向链表 Python 链表 中等
0447 回旋镖的数量 Python 哈希表、数学 中等
0450 删除二叉搜索树中的节点 Python 中等
0454 四数相加 II Python 哈希表 中等
0461 汉明距离 Python 位运算 简单
0485 最大连续 1 的个数 Python 数组 简单
0494 目标和 Python 深度优先搜索、动态规划 中等
0504 七进制数 Python 简单
0509 斐波那契数 Python 数组 简单
0542 01 矩阵 Python 深度优先搜索、广度优先搜索 中等
0543 二叉树的直径 Python 二叉树 简单
0557 反转字符串中的单词 III Python 字符串 简单
0561 数组拆分 I Python 数组 简单
0599 两个列表的最小索引总和 Python 哈希表 简单
0621 任务调度器 Python 贪心算法、队列、数组 中等
0622 设计循环队列 Python 队列 中等
0633 平方数之和 Python 双指针 中等
0652 寻找重复的子树 Python 树、哈希表 中等
0658 找到 K 个最接近的元素 Python 二分查找 中等
0665 非递减数列 Python 数组 简单
0673 最长递增子序列的个数 Python 动态规划 中等
0690 员工的重要性 Python 深度优先搜索、广度优先搜索、哈希表 简单
0695 岛屿的最大面积 Python 搜索 中等
0700 二叉搜索树中的搜索 Python 简单
0701 二叉搜索树中的插入操作 Python 中等
0702 搜索长度未知的有序数组 Python 二分查找 中等
0704 二分查找 Python 二分查找 简单
0705 设计哈希集合 Python 哈希表 简单
0706 设计哈希映射 Python 哈希表 简单
0707 设计链表 Python 链表 中等
0719 找出第 k 小的距离对 Python 堆、数组、二分查找 困难
0724 寻找数组的中心下标 Python 数组 简单
0733 图像渲染 Python 深度优先搜索 简单
0739 每日温度 Python 栈、哈希表 中等
0744 寻找比目标字母大的最小字母 Python 二分查找 简单
0752 打开转盘锁 Python 广度优先搜索 中等
0779 第K个语法符号 Python 递归 中等
0801 使序列递增的最小交换次数 Python 动态规划 中等
0836 矩形重叠 Python 数学 简单
0841 钥匙和房间 Python 深度优先搜索、图 中等
0867 转置矩阵 Python 数组 简单
0876 链表的中间结点 Python 链表、指针 简单
0918 环形子数组的最大和 Python 数组、动态规划 中等
0938 二叉搜索树的范围和 Python 二叉树 简单
0993 二叉树的堂兄弟节点 Python 树、广度优先搜索 简单
1004 最大连续1的个数 III Python 双指针、滑动窗口 中等
1011 在 D 天内送达包裹的能力 Python 数组、二分查找 中等
1047 删除字符串中的所有相邻重复项 Python 字符串、栈 简单
1227 飞机座位分配概率 Python 数学、动态规划 中等
1232 缀点成线 Python 几何、数组、数学 简单
1480 一维数组的动态和 Python 数组 简单
1486 数组异或操作 Python 位运算、数组 简单
1720 解码异或后的数组 Python 位运算 简单

About

⛽️「算法通关手册」,超详细的「算法与数据结构」基础讲解教程,700+ 道「LeetCode 题目」详细解析。通过「算法理论学习」和「编程实战练习」相结合的方式,从零基础到彻底掌握算法知识。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.9%
  • Shell 0.1%