所有的回溯方法都能抽象为一颗n叉树,叉树为每次处理的集合大小,树的深度为递归调用的次数
可以用回溯解决的问题:
组合问题
排列问题
字符串切割问题
子集问题
棋盘问题

1.组合问题

一般组合问题不用排序,所以在集合的横向遍历的时候,传入一个参数startIndex可以做到剪枝

树层去重的话,需要对集合先进行排序,也可以每层使用一个hashset去重

2.字符串切割问题

切割就是每次从startIndex切割,从startIndex开始到后面某个字串符合要求就再切割,然后递归切割,从变到这个符合的子串下一个开始切割

3.子集

组合问题是收集叶子节点的所有解;
子集问题是手机所有的节点的解

4.排列问题

排列问题因为要有序,所以每次对集合的搜索都要从0开始