Summarize of backtracking problems.
Backtracking.
public class Solution {
public static void backTrack(List<Integer> tmp, List<List<Integer>> res, int start, int target, int[] nums) {
if (target < 0) return;
else if (target == 0) res.add(new ArrayList<>(tmp));
else {
for (int i=start; i<nums.length; i++) {
tmp.add(nums[i]);
backTrack(tmp, res, i, target-nums[i], nums);
tmp.remove(tmp.size()-1);
}
}
}
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> res = new ArrayList<>();
backTrack(new ArrayList<>(), res, 0, target, candidates);
return res;
}
}