39. Combination Sum
class Solution {
List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> combinationSum(int[] candidates, int target) {
backTrack(candidates, new ArrayList<>(), target, 0);
return res;
}
public void backTrack(int[] candidates, List<Integer> tempList, int target, int start) {
if(0 == target) {
res.add(new ArrayList(tempList));
}
for(int i = start; i < candidates.length; i++) {
if(target - candidates[i] >= 0) {
tempList.add(candidates[i]);
backTrack(candidates, tempList, target - candidates[i], i);
tempList.remove(tempList.size()-1);
}
}
}
}
40. Combination Sum II
class Solution {
List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
Arrays.sort(candidates);
backTrack(new ArrayList<Integer>(), target, 0, candidates);
return res;
}
public void backTrack(List<Integer> temp, int target, int start, int[] candidates) {
if(target == 0) {
res.add(new ArrayList(temp));
}
for(int i = start; i<candidates.length; i++) {
if (i > start && candidates[i] == candidates[i - 1]) continue;
if (target - candidates[i] >= 0) {
temp.add(candidates[i]);
backTrack(temp, target - candidates[i], i+1, candidates);
temp.remove(temp.size() -1);
}
}
}
}