39. Combination Sum
Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
The same repeated number may be chosen from C unlimited number of times.
Note:
- All numbers (including target) will be positive integers.
- The solution set must not contain duplicate combinations.
For example, given candidate set
[2, 3, 6, 7]
and target7
,
A solution set is:[ [7], [2, 2, 3] ]
题目大意:给定一个集合,和一个目标数字,找出集合中所有的数,使其和为给出的目标数字。每个数字可以被使用多次。
思路:回溯。
代码:
package Array; import java.util.ArrayList; import java.util.List; /** * @Author OovEver * @Date 2017/11/28 10:10 */ public class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> res = new ArrayList<>(); backtrack(res, new ArrayList<>(), candidates, target, 0); return res; } private void backtrack(List<List<Integer>> res, List<Integer> tempList, int[] nums, int target, int start) { if (target < 0) { return; } else if (target == 0) { res.add(new ArrayList<>(tempList)); } else { for(int i=start;i<nums.length;i++) { tempList.add(nums[i]); backtrack(res, tempList, nums, target - nums[i], i); tempList.remove(tempList.size() - 1); } } } }