# 组合总和
给定一个无重复元素的数组 candidates
和一个目标数 target
,找出 candidates
中所有可以使数字和为 target
的组合。
candidates
中的数字可以无限制重复被选取。
说明:
- 所有数字(包括
target
)都是正整数。
- 解集不能包含重复的组合。
示例 1:
输入:candidates = [2,3,6,7], target = 7,
输出:[[7],[2,2,3]]
示例 2:
输入:candidates = [2,3,5], target = 8,
输出:[[2,2,2,2],[2,3,3],[3,5]]
提示:
1 <= candidates.length <= 30
1 <= candidates[i] <= 200
candidate
中的每个元素都是独一无二的。
1 <= target <= 500
## template
```java
class Solution {
public List> combinationSum(int[] candiates, int target) {
List> resultList = new ArrayList<>();
List result = new ArrayList<>();
Arrays.sort(candiates);
dfs(candiates, resultList, result, 0, target);
return resultList;
}
private void dfs(int[] candiates, List> resultList, List result, int start, int target) {
if (target < 0) {
return;
}
else if (target == 0) {
resultList.add(new ArrayList<>(result));
} else {
for (int i = start; i < candiates.length; i++) {
result.add(candiates[i]);
dfs(candiates, resultList, result, i, target - candiates[i]);
result.remove(result.size() - 1);
}
}
}
}
```
## 答案
```java
```
## 选项
### A
```java
```
### B
```java
```
### C
```java
```