LeetCode刷题指南
第 0 章 hot100
0.1 哈希
0.2 双指针
0.3 滑动窗口
0.4 子串
0.5 普通数组
0.6 矩阵
0.7 链表
0.8 二叉树
0.9 图论
0.10 回溯
0.11 二分查找
0.12 栈
0.13 堆
0.14 贪心算法
0.15 动态规划
0.16 多维动态规划
0.17 技巧
第0-1章 面试经典150
0.1 数组/字符串
0.2 双指针
0.3 滑动窗口
链表
二叉树
第 1 章 最易懂的贪心算法
1.1 算法解释
1.2 分配问题
1.3 区间问题
1.4 练习
第 2 章 玩转双指针
2.1 算法解释
2.2 Two Sum
2.3 归并两个有序数组
2.4 滑动窗口
2.5 快慢指针
2.6 练习
第 3 章 居合斩!二分查找
3.1 算法解释
3.2 求开方
3.3 查找区间
3.4 查找峰值
3.5 旋转数组查找数字
3.6 练习
第 4 章 千奇百怪的排序算法
4.1 常用排序算法
4.2 快速选择
4.3 桶排序
4.4 练习
第 5 章 一切皆可搜索
5.1 算法解释
5.2 深度优先搜索
5.3 回溯法
5.4 广度优先搜索
5.5 练习
第 6 章 深入浅出动态规划
6.1 算法解释
6.2 基本动态规划:一维
6.3 基本动态规划:二维
6.4 分割类型题
6.5 子序列问题
6.6 背包问题
6.7 字符串编辑
6.8 股票交易
6.9 练习
第 7 章 化繁为简的分治法
7.1 算法解释
7.2 表达式问题
7.3 练习
第 8 章 巧解数学问题
8.1 引言
8.2 公倍数与公因数
8.3 质数
8.4 数字处理
8.5 随机与取样
8.6 练习
第 9 章 神奇的位运算
9.1 常用技巧
9.2 位运算基础问题
9.3 二进制特性
9.4 练习
第 10 章 妙用数据结构
10.1 C++ STL
10.2 Python 常用数据结构
10.3 数组
10.4 栈和队列
10.5 单调栈
10.6 优先队列
10.7 双端队列
10.8 哈希表
10.9 多重集合和映射
10.10 前缀和与积分图
10.11 练习
第 11 章 令人头大的字符串
11.1 引言
11.2 字符串比较
11.3 字符串理解
11.4 字符串匹配
11.5 练习
第 12 章 指针三剑客之一:链表
12.1 数据结构介绍
12.2 链表的基本操作
12.3 其它链表技巧
12.4 练习
第 13 章 指针三剑客之二:树
13.1 数据结构介绍
13.2 树的递归
13.3 层次遍历
13.4 前中后序遍历
13.5 二叉查找树
13.6 字典树
13.7 练习
第 14 章 指针三剑客之三:图
14.1 数据结构介绍
14.2 二分图
14.3 拓扑排序
14.4 练习
第 15 章 更加复杂的数据结构
15.1 引言
15.2 并查集
15.3 复合数据结构
15.4 练习
第16章 面试题
第 17 章 十大经典排序算法
README
本文档使用 MrDoc 发布
-
+
首页
0.10 回溯
[46.全排列](https://leetcode.cn/problems/permutations/?envType=study-plan-v2&envId=top-100-liked) ```py class Solution: def backtracking(self, nums, level, res): if level == len(nums) - 1: res.append(nums[:]) for i in range(level, len(nums)): nums[i], nums[level] = nums[level], nums[i] self.backtracking(nums, level+1, res) nums[i], nums[level] = nums[level], nums[i] def permute(self, nums: List[int]) -> List[List[int]]: res = [] self.backtracking(nums, 0, res) return res ``` [78. 子集](https://leetcode.cn/problems/subsets/?envType=study-plan-v2&envId=top-100-liked) ```py class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: n = len(nums) res = [] path = [] def dfs(i): res.append(path.copy()) for j in range(i, n): path.append(nums[j]) dfs(j+1) path.pop() dfs(0) return res ``` [17. 电话号码的字母组合](https://leetcode.cn/problems/letter-combinations-of-a-phone-number/?envType=study-plan-v2&envId=top-100-liked) ```py class Solution: def letterCombinations(self, digits: str) -> List[str]: MAP = '', '', 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz' ans = [] n = len(digits) path = [''] * n if n == 0: return [] def dfs(i): if i == n: ans.append(''.join(path.copy())) return for c in MAP[int(digits[i])]: path[i] = c dfs(i+1) dfs(0) return ans ``` [39. 组合总和](https://leetcode.cn/problems/combination-sum/?envType=study-plan-v2&envId=top-100-liked) ```py class Solution: def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: n = len(candidates) ans = [] path = [] def dfs(i, remain): if remain == 0: ans.append(path.copy()) return if i == n or remain < 0: return dfs(i + 1, remain) path.append(candidates[i]) dfs(i, remain - candidates[i]) path.pop() dfs(0, target) return ans ``` [22. 括号生成](https://leetcode.cn/problems/generate-parentheses/?envType=study-plan-v2&envId=top-100-liked) ```py class Solution: def generateParenthesis(self, n: int) -> List[str]: res = [] m = 2 * n def dfs(s,left,right): if len(s) == m: res.append(s) return if left < n: dfs(s + '(',left + 1, right) if right < left: dfs(s + ')', left, right + 1) dfs('', 0, 0) return res ``` [79. 单词搜索](https://leetcode.cn/problems/word-search/?envType=study-plan-v2&envId=top-100-liked) ```py class Solution: def exist(self, board: List[List[str]], word: str) -> bool: m, n = len(board), len(board[0]) def dfs(i, j, k): if k == len(word): return True if not (0 <= i < m and 0 <= j < n and board[i][j] == word[k]): return False temp = board[i][j] board[i][j] = "" res = ( dfs(i + 1, j, k + 1) or dfs(i - 1, j, k + 1) or dfs(i, j + 1, k + 1) or dfs(i, j - 1, k + 1) ) board[i][j] = temp return res for i in range(m): for j in range(n): if dfs(i, j, 0): return True return False ``` [131. 分割回文串](https://leetcode.cn/problems/palindrome-partitioning/?envType=study-plan-v2&envId=top-100-liked) ```py class Solution: def partition(self, s: str) -> List[List[str]]: n = len(s) ans = [] path = [] def dfs(i): if i == n: ans.append(path.copy()) for j in range(i, n): t = s[i : j + 1] if t == t[::-1]: path.append(t) dfs(j + 1) path.pop() dfs(0) return ans ```
嘉心糖糖
2025年8月10日 16:20
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码