1. 两数之和:哈希
2. 两数相加:链表模拟, 数学
3. 无重复字符的最长子串:滑动窗口(双指针+哈希)
4. 寻找两个正序数组的中位数:二分查找
5. 最长回文子串:中心扩展法、DP动态规划(区间DP)
6. Z 字形变换:数学(找规律),模拟
7. 整数反转:数学
8. 字符串转换整数 (atoi):模拟(常见解法),字符串(有限自动机)
9. 回文数:双指针
10. 正则表达式匹配:DP动态规划(线性DP)
11. 盛最多水的容器:单调栈、双指针(常见解法)
12. 整数转罗马数字:模拟、打表
13. 罗马数字转整数:模拟、打表
14. 最长公共前缀:排序(字典序)、分治、模拟
15. 三数之和:排序 + 双指针, 类似与四数之和、三数最接近之和
16. 最接近的三数之和:排序 + 双指针
17. 电话号码的字母组合:DFS(回溯)
18. 四数之和:排序 + 双指针(15进化版)
19. 删除链表的倒数第 N 个结点:栈、双指针
21. 合并两个有序链表:双指针(链表),递归和迭代两种方式
22. 括号生成:DFS
23. 合并K个升序链表:分治、优先队列
26. 删除排序数组中的重复项:双指针
27. 移除元素:双指针
28. 实现 strStr():字符串匹配(kmp)
29. 两数相除:二分
30. 串联所有单词的子串:滑动窗口 + 哈希
31. 下一个排列:模拟
32. 最长有效括号:栈、DP动态规划(线性DP)、模拟(不需要额外空间解法)
33. 搜索旋转排序数组:二分查找
34. 在排序数组中查找元素的第一个和最后一个位置:二分查找
35. 搜索插入位置:二分查找
36. 有效的数独:模拟
37. 解数独:DFS(回溯)
38. 外观数列:模拟
39. 组合总和:DFS(回溯)
40. 组合总和 II:DFS(回溯)
41. 缺失的第一个正数:数组(原地置换)
42. 接雨水:单调栈、DP动态规划(递推DP)、双指针(左右最大值)
43. 字符串相乘:模拟
44. 通配符匹配:DP动态规划(线性DP)
45. 跳跃游戏 II:贪心、DP动态规划(线性DP)
46. 全排列:DFS(回溯)
47. 全排列 II:DFS(回溯)
48. 旋转图像:数组(原地置换)
49. 字母异位词分组:排序+map、哈希
50. Pow(x, n):数学(快速幂),迭代和递归两种方法
51. N 皇后:DFS(回溯)
52. N皇后 II:DFS(回溯)
53. 最大子序和:DP动态规划(区间DP)、贪心、滑动窗口
54. 螺旋矩阵:模拟
55. 跳跃游戏:贪心
56. 合并区间:排序
57. 插入区间:模拟
59. 螺旋矩阵 II:模拟
60. 排列序列:数学、DFS(回溯)+剪枝
61. 旋转链表:模拟
62. 不同路径:DP动态规划(计数型DP)、记忆化搜索
63. 不同路径 II:DP动态规划(计数型DP)
64. 最小路径和:DP动态规划(序列DP)
65. 有效数字:模拟、自动机
66. 加一:模拟
67. 二进制求和:模拟、位运算
68. 文本左右对齐:模拟
69. x 的平方根:二分查找、袖珍计算器算法、牛顿迭代
70. 爬楼梯:DP动态规划(计数型DP)、数学(快速幂)
71. 简化路径:栈
72. 编辑距离:DP动态规划(序列DP)
73. 矩阵置零:模拟(标记法)
74. 搜索二维矩阵:二分查找
75. 颜色分类:双指针
76. 最小覆盖子串:滑动窗口
77. 组合:DFS(回溯)
78. 子集:DFS(回溯)
79. 单词搜索:DFS(回溯)
81. 搜索旋转排序数组 II:二分查找(排除有序部分)
83. 删除排序链表中的重复元素:双指针
84. 柱状图中最大的矩形:单调栈
85. 最大矩形:单调栈、动态规划
86. 分隔链表:双指针
87. 扰乱字符串:动态规划(区间DP)
88. 合并两个有序数组:双指针
89. 格雷编码:DFS(回溯)、数学
90. 子集 II:DFS(回溯)
91. 解码方法:DP动态规划(线性DP)
92. 反转链表 II:模拟
93. 复原 IP 地址:DFS(回溯)
94. 二叉树的中序遍历:树的遍历(中序)、递归和迭代两种方法(栈、DFS)
95. 不同的二叉搜索树 II:DFS(回溯)
96. 不同的二叉搜索树:DP动态规划(计数型DP)、数学
97. 交错字符串:DP动态规划(序列DP)
98. 验证二叉搜索树:树的遍历(中序)
99. 恢复二叉搜索树:树的遍历(中序)
100. 相同的树:DFS、BFS
101. 对称二叉树:DFS、BFS
102. 二叉树的层序遍历:树的遍历(DFS、BFS)
103. 二叉树的锯齿形层序遍历:树的遍历(DFS、BFS)
104. 二叉树的最大深度:树的遍历(DFS、BFS)
105. 从前序与中序遍历序列构造二叉树:DFS、树的操作(构造)
106. 从中序与后序遍历序列构造二叉树:DFS、树的操作(构造)
107. 二叉树的层序遍历 II:树的遍历
108. 将有序数组转换为二叉搜索树:树的遍历
109. 有序链表转换二叉搜索树:双指针、树的遍历、分治
110. 平衡二叉树:DFS
111. 二叉树的最小深度:树的遍历
112. 路径总和:DFS(回溯)、BFS、栈
113. 路径总和 II:DFS(回溯)
114. 二叉树展开为链表:树的遍历
115. 不同的子序列:DP动态规划(递推DP)
118. 杨辉三角:模拟、数学、DP动态规划(线性DP)
119. 杨辉三角 II:DP动态规划(线性DP)、模拟
120. 三角形最小路径和:DP动态规划(线性DP)
121. 买卖股票的最佳时机:模拟、DP动态规划(线性DP)
122. 买卖股票的最佳时机 II:DP动态规划(线性DP)、贪心
123. 买卖股票的最佳时机 III:DP动态规划(线性DP)
124. 二叉树中的最大路径和:dfs(需要注意点,小于0直接为0)、DP动态规划(树形DP)
125. 验证回文串:双指针
126. 单词接龙 II:DFS(回溯)、BFS
127. 单词接龙:双向BFS、启发式搜索
128. 最长连续序列:哈希、DP动态规划(线性DP)、并查集
129. 求根节点到叶节点数字之和:DFS、BFS
130. 被围绕的区域:DFS、BFS、并查集
131. 分割回文串:DFS(回溯)(优化:DP动态规划(序列DP)、记忆化搜索)
132. 分割回文串 II:DP动态规划(序列DP)
133. 克隆图:DFS、BFS
134. 加油站:模拟、滑动窗口、贪心
135. 分发糖果:贪心
136. 只出现一次的数字:位运算
137. 只出现一次的数字 II:位运算、自动机、哈希
138. 复制带随机指针的链表:模拟、哈希
139. 单词拆分: DP动态规划(背包DP)
140. 单词拆分 II:DP动态规划(背包DP)、记忆化搜索
141. 环形链表:哈希、双指针(快慢指针)
142. 环形链表 II:哈希、双指针(快慢指针)
143. 重排链表:模拟、双指针
144. 二叉树的前序遍历:树的遍历,分迭代和递归两种方法
145. 二叉树的后序遍历:树的遍历,分迭代和递归两种方法
146. LRU 缓存机制:哈希表 + 双向链表
151. 翻转字符串里的单词:模拟、栈
152. 乘积最大子数组:DP动态规划(区间DP)
155. 最小栈:栈
156. 上下翻转二叉树:模拟
159. 至多包含两个不同字符的最长子串:双指针
160. 相交链表:哈希、双指针
164. 最大间距:排序(基数排序、桶排序)
165. 比较版本号:模拟、双指针
166. 分数到小数:模拟
167. 两数之和 II - 输入有序数组:二分查找、双指针
168. Excel表列名称:数学(进制转换)
169. 多数元素:位运算、哈希、排序、分治、Boyer-Moore 投票算法
171. Excel 表列序号:数学(进制转换)
172. 阶乘后的零:数学(因子分解)
173. 二叉搜索树迭代器:树的遍历
174. 地下城游戏:DP动态规划(线性DP)
179. 最大数:排序(sort应用)
186. 翻转字符串里的单词 II:模拟
187. 重复的DNA序列:滑动窗口、哈希、位运算 (进阶:任意长度)
188. 买卖股票的最佳时机 IV:DP动态规划(线性DP)
189. 旋转数组:数组(原地置换)
190. 颠倒二进制位:位运算、模拟
191. 位1的个数:位运算
198. 打家劫舍:DP动态规划(线性DP)
199. 二叉树的右视图:树的遍历
200. 岛屿数量:DFS、BFS、并查集
201. 数字范围按位与:位运算
202. 快乐数:哈希、双指针、数学
203. 移除链表元素:模拟,分为迭代和递归两种方法
204. 计数质数:打表、埃氏筛、线性筛
205. 同构字符串:哈希
206. 反转链表:模拟(进阶:空间o(1))
207. 课程表:DFS、BFS(拓扑排序)
209. 长度最小的子数组:滑动窗口,前缀和+二分
210. 课程表 II:DFS、BFS(拓扑排序)
212. 单词搜索 II:DFS、字典树+DFS
213. 打家劫舍 II:DP动态规划(边界处理,线性DP)
214. 最短回文串:哈希、字符串匹配(KMP)
215. 数组中的第K个最大元素:排序(TOPK)
216. 组合总和 III:DFS(回溯)、位运算(二进制)
217. 存在重复元素;哈希、排序
218. 天际线问题:扫描线+优先队列
219. 存在重复元素 II:滑动窗口
220. 存在重复元素 III:滑动窗口、桶
221. 最大正方形:DP动态规划(线性DP)
222. 完全二叉树的节点个数:树的遍历
223. 矩形面积:数学(矩阵重叠面积)
225. 用队列实现栈:队列
226. 翻转二叉树:DFS、BFS
228. 汇总区间:模拟
229. 求众数 II:摩尔投票法
230. 二叉搜索树中第K小的元素:树的遍历(中序)
231. 2的幂:位运算(二进制)
233. 数字 1 的个数:数学、DP动态规划(数位DP)
234. 回文链表:模拟(转换为数组)、双指针
235. 二叉搜索树的最近公共祖先:DFS、二叉搜索树性质
236. 二叉树的最近公共祖先:DFS、哈希
238. 除自身以外数组的乘积:模拟(前缀积、后缀积)
239. 滑动窗口最大值:优先队列、单调队列
241. 为运算表达式设计优先级:分治、DP动态规划(区间DP)
242. 有效的字母异位词:排序、哈希
243. 最短单词距离:模拟
244. 最短单词距离 II:哈希
245. 最短单词距离 III:模拟
246. 中心对称数:哈希
247. 中心对称数 II:DP动态规划()
248. 中心对称数 III:DFS、BFS
249. 群组偏移字符串:数学(规律)、哈希
250. 统计同值子树:树的遍历
252. 会议室:排序
253. 会议室 II:排序
254. 因子的组合:DFS(回溯)
255. 验证前序遍历序列二叉搜索树:单调栈
256. 粉刷房子:DP动态规划(序列DP)
257. 二叉树的所有路径:DFS、BFS
258. 各位相加:数学(规律)
259. 较小的三数之和:双指针
260. 只出现一次的数字 III:数学(分组异或)、位运算
263. 丑数:数学
264. 丑数 II:优先队列、DP动态规划(线性DP)
265. 粉刷房子 II:DP动态规划(序列DP)
266. 回文排列:哈希
267. 回文排列 II:DFS(回溯)
268. 丢失的数字:二分查找、排序、哈希、位运算、数学
270. 最接近的二叉搜索树值:二分查找
272. 最接近的二叉搜索树值 II:树的遍历 + 优先队列
274. H 指数:排序
275. H 指数 II:二分查找
276. 栅栏涂色:DP动态规划(计数型DP)
277. 搜索名人:DFS
278. 第一个错误的版本:二分查找
279. 完全平方数:DP动态规划(背包DP)
280. 摆动排序:排序
281. 锯齿迭代器:队列
282. 给表达式添加运算符:DFS(回溯)
283. 移动零:双指针
284. 窥探迭代器:队列
285. 二叉搜索树中的顺序后继:树的遍历
286. 墙与门:DFS、BFS
287. 寻找重复数:二分、位运算(二进制)、双指针(快慢指针)
289. 生命游戏:模拟、位运算
290. 单词规律:哈希
291. 单词规律 II:DFS(回溯)
292. Nim 游戏:数学(推理)、博弈论
293. 翻转游戏:模拟
294. 翻转游戏 II:DFS(回溯)
295. 数据流的中位数:优先队列、双指针
297. 二叉树的序列化与反序列化:DFS、BFS
298. 二叉树最长连续序列:DFS
299. 猜数字游戏:哈希
300. 最长递增子序列:DP动态规划(线性DP)、贪心+二分查找、DP动态规划+二分查找
301. 删除无效的括号:DFS(回溯)、BFS
302. 包含全部黑色像素的最小矩形:DFS、BFS
305. 岛屿数量 II:并查集
306. 累加数:DFS(回溯)
308. 二维区域和检索 - 可变:前缀和
309. 最佳买卖股票时机含冷冻期:DP动态规划(线性DP)
310. 最小高度树:BFS(拓扑)
311. 稀疏矩阵的乘法:模拟
312. 戳气球:记忆化搜索、DP动态规划(区间DP)
313. 超级丑数:DP动态规划(线性DP)
314. 二叉树的垂直遍历:树的遍历
315. 计算右侧小于当前元素的个数:排序(归并)、线段树、树状数组、二叉搜索树
316. 去除重复字母:单调栈
317. 离建筑物最近的距离:BFS
318. 最大单词长度乘积:位运算(位 + 预计算)
319. 灯泡开关:数学
320. 例举单词的全部缩写:位运算、DFS(回溯)
321. 拼接最大数:单调栈
322. 零钱兑换:DP动态规划(背包DP)、记忆化搜索
323. 无向图中联通分量的数目:并查集
324. 摆动排序 II:排序、快速选择+3-way-partition
325. 和等于k的最长子数组长度:前缀和
326. 3的幂:数学、打表、倍数/约数
327. 区间和的个数:排序(归并)、线段树、前缀和+二分
328. 奇偶链表:模拟