这道组合总和特点是可以在一个无重复元素的整数数组中,每个数组被无限次选取的情况下组合出
和为target的组合
1.输入输出
输入数组,目标值,sum值,start index
2.终止条件
当sum == target时返回
3.单层递归回溯逻辑
当i小于数组长度并且candidates[i] + sum <= target(剪枝)时for loop
更新:
1.sum+=candidates[i];
2.path.push_back(candidates[i]);
进行递归
回溯:
1.sum -= candidates[i];
2.path.pop_back();

这道题的特点是 nums中可能会有重复的数 得到的组合只能唯一 所以要在树层上进行去重
首先当sum == target时 放入result return
for loop逻辑中if这样写的原因是
在 i== start 之一层中,i经过变化会代表之一层中的每一个其他数字
这样可以保证数层去重
如果这里写成i= 0;那么每一层夺回从头看,这样相当于时纵向去重

1.当start(这里作为分割线用)大于等于了数组size相当于 分到底了 就把path放到result中
2.需要一个helper去判断是不是回文串
3.for loop部分,i = start到数组尾进行,当当前数组(start,i)为回文串时把这一段放进result中
如果不是直接continue跳过
随后进行递归回溯


66

被折叠的 条评论
为什么被折叠?



