数据结构与算法刷题之【深搜&宽搜递归&分治&剪枝回溯】篇
<p>汇总搜索与回溯相关的数据结构与算法刷题笔记,讲解深度优先搜索、广度优先搜索、分治、剪枝与回溯的原理与模板,涵盖排列组合、迷宫等题型并给出Java实现。</p>
<p>汇总搜索与回溯相关的数据结构与算法刷题笔记,讲解深度优先搜索、广度优先搜索、分治、剪枝与回溯的原理与模板,涵盖排列组合、迷宫等题型并给出Java实现。</p>
<p>本文讲解 LeetCode 第 17 题「电话号码的字母组合」,将数字 2-9 映射为字母并求所有组合。使用递归回溯逐层枚举每组字母,并通过 StringBuilder 优化字符串拼接与撤销,给出完整 Java 代码与复杂度分析。</p>
<p>本文讲解 LeetCode 第 216 题「组合总和 III」,从 1-9 中取 k 个数使其和为 n。采用组合型枚举回溯模板,用 state 数组标记选中元素,并在搜索前进行剪枝,最后校验和是否等于目标值,附完整 Java 代码。</p>
<p>本文讲解 LeetCode 77 组合,返回 [1,n] 中所有 k 个数的组合。文章给出题目描述与调试代码,先指出暴力多重循环无法应对变化的 k,再重点介绍回溯法配合 startIndex 收缩选择范围,并给出剪枝优化减少无效递归。</p>
<p>本文讲解 LeetCode 第 78 题「子集」的回溯解法,题目要求返回不含重复元素的整数数组的所有子集。通过 begin 参数控制组合、在递归入口处收集节点,实现幂集枚举,并附完整 Java 代码与图解,帮助理解回溯中结果集的收集时机与去重思路。</p>
<p>本文讲解 LeetCode 第 46 题「全排列」的回溯解法,针对不含重复数字的数组求所有排列。借助访问状态数组标记已选元素,在递归到深度等于数组长度时收集结果,并配合回溯撤销选择,附完整 Java 代码与图解。</p>