回溯总结
回溯的知识点总结
- 看你可选的选择
是不是重复(需不需要使用used数组去重),如“组合总和Ⅱ”中出现的数组的元素是有重复的,而且要求组合都是不一样的。 start参数是不是应该考虑在参数模板中,如果是求的组合数,那么需要start参数,如果求的是排列数,就不需要start参数。元素是不是可以重复选择,如在题目“组合总和”中,元素是可以重复选择的,所以start在下一次递归中选择i而不是i + 1。- 注意
树枝和树层去重的条件(注意都牵涉到去重了,那必须是有重复元素的前提下):
看代码随想录的组合总和Ⅱ,看图说话:

好好理解,有两个维度,一个是树枝一个是树层,横着的是树层,竖着的是树枝。总结来说就是:

- 注意题目
分割回文串的判断条件,就能搞明白i和start的关系(start是改组答案的begin(),start是改组答案的end() - 1),明白树层的for循环是干嘛的:

- 去重可以有两种方法,但是都需要
提前排序,一个是unordered_set方法,一个是使用used数组。(以下是unordered_set方法)

- 碰到排列问题了,要注意区别了:
没有start了,start的本质还是树枝的顺序需要用到used来去除树枝的重复了

浙公网安备 33010602011771号