刷LeetCode一定要总结,不然就是走马观花,很难体会到其中的精髓
DFS系列的算法相比其他算法,本人是觉得是相对比较抽象的。其他的算法,比如动态规划,排序等,只要处理好每一步的处理结构就能很好的完成算法的设计和实现。但是DFS算法需要比较高的抽象能力,不光要处理每一步的流程,还要兼顾每一次迭代对其他迭代的影响,因为在设置迭代单元的时候,需要很好的界定功能边界。
LeeTcode里面的DFS相关的算法,主要有求解和为某数的组合,排列组合、格雷码、回文,排列组合,求子集
这些算法都有极大的共性:
要么是单纯的递归:每次都值处理当前阶段需要处理的东西
要么递归加for循环:不光要递归的处理当前模块的内容,还需要对当前的内容进行变动和尝试,即在一个for循环中,不断的和数组后面的数据进行重试
LeetCode之Backtracing题目汇总
Combination Sum
Combination Sum II
Combination Sum III
Combinations
Generate Parentheses
Gray Code
Letter Combinations of a Phone Number
Palindrome Partitioning
Permutation Sequence
Permutations
Permutations II
Restore IP Addresses
Subsets
Subsets II
Word Search