组合总和
- 给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。
- candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。
- 对于给定的输入,保证和为 target 的唯一组合数少于 150 个。
示例 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]]
class Solution {
public List<List<Integer>> combinationSum(int[] candidates, int target) {
Arrays.sort(candidates);
List<List<Integer>> result = new ArrayList<>();
TreBack(candidates, new ArrayList<>(), target, 0, result);
return result;
}
public void TreBack(int[] arr, List<Integer> list, int target, int index, List<List<Integer>> result) {
for (int i = index; i < arr.length; i++) {
List<Integer> newList = new ArrayList<>();
newList.addAll(list);
newList.add(arr[i]);
int sum = 0;
for (Integer num : newList) {
sum += num;
}
if (sum == target) {
result.add(newList);
} if(sum > target) {
return;
}
TreBack(arr, newList, target, i, result);
}
}
}