回溯法:采用回溯算法来寻找所有符合条件的组合。每次选择一个候选数字,递归地减去这个数字,并继续选择,直到目标值 target 为 0。由于可以重复选择数字,因此递归过程中不会回退到前一个数字,而是从当前数字继续选择。
递归过程:从数组中选择一个数字,如果该数字不大于当前目标值 target,就将其加入当前路径 path,并递归调用自己减少目标值。递归完成后,回溯时移除最后一个数字,继续尝试其他组合。
终止条件:
target == 0,说明找到了一个符合条件的组合,加入结果中。target < 0,说明当前路径不满足条件,返回。给定一个无重复元素的整数数组 candidates 和一个目标整数 target,找出 candidates 中可以使数字和为 target 的所有不同组合,并以任意顺序输出。
candidates 中的同一个数字可以被无限制重复选取。如果至少一个数字的被选数量不同,则两种组合视为不同组合。
保证不同组合的数量少于 150 个。
n 和 target,分别表示数组的长度和目标值。n 个整数,表示数组 candidates 中的元素,元素互不相同。4 7
2 3 6 7
2 2 3
7
3 8
2 3 5
2 2 2 2
2 3 3
3 5
1 1
2