题目
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的每个数字在每个组合中只能使用一次。
说明:
所有数字(包括目标数)都是正整数。
解集不能包含重复的组合。
示例 1:
输入: candidates = [10,1,2,7,6,1,5], target = 8,
所求解集为:
[
[1, 7],
[1, 2, 5],
[2, 6],
[1, 1, 6]
]
示例 2:
输入: candidates = [2,5,2,1,2], target = 5,
所求解集为:
[
[1,2,2],
[5]
]
思路
类似leetcode39 组合总和
区别在于39中没有重复数字,每个数字可以无限取(所以递归时的索引不一样);
而本题中有重复数字,每个数字只能取一次,关键点在于如何避免重复。所以可以先对数组排序,在for循环范围中如果当前数和前一个数相等,则跳过。
具体如:candidates 1 1 2 5 6 7 10
分支1: i = 0 —func— index=1(递归)
A:candidates[0]被选取,candidates[1]不被选取
B:candidates[0]被选取,candidates[1]被选