组合(时间复杂度与2^n有关)
425 Letter Combinations of a Phone Number
做一个dict对应映射关系(string或数组利用下标也可以完成映射)
递归主函数+递归三要素
90 k Sum II,k数和 II
无需排序
递归主函数
递归三要素:
出口:k=0&&target==0;找到了结果
k=0||target<=0;不可能找到结果
DFS传入i+1
135 Combination Sum 数字组合(K个元素的组合,和为target,数字可以重复使用,输出结果非降序)
需要set去重+排序+递归三要素
DFS传入i而非i+1,下一层DFS可以重复使用位置数字
排列(时间复杂度与n!有关)
10 String Permutation II 字符串的不同排列
去重逻辑:在同一层中,如果前面的b还没选掉,就不能选择后面的b,否则,会造成重复。
132 Word Search II 单词搜索 II 字母矩阵(Character Matrix)
1.如果当前走过的路径
-是一个词,已经找到了一个词
-是一个前缀
-不是词,也不是前缀,回退一步(剪枝)
wordSet中含有所有需要的词
prefixSet中含有所有词的前缀(包括整个词)
2.在上右下左四个方向中选择一个还没走过的方向,走到下一个点,回到步骤1
Word Ladder II 单词接龙 II 词语接龙
BFS+DFS题目解析
BFS逐层遍历的方式天然具有寻找最短路径的属性。利用这个属性,我们可以找到从一点出发,可以到达的不绕远的下一个点。
DFS一直向深度纵深的方式天然具有记录当前路径的属性。我们不需要在BFS中用大量的空间记录每一个点的路径。有了BFS的预处理,DFS每次纵深的下一步,都是不绕远的下一个点。