给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
说明:
candidates 中的数字可以无限制重复被选取。
所有数字(包括 target)都是正整数。
解集不能包含重复的组合。
示例 1:
输入: candidates = [2,3,6,7], target = 7,
所求解集为:
[
[7],
[2,2,3]
]
思路:类似于两个数之和与target的题型,target减去另外其一个数;暴力解决,采用递归调用。
代码:
class Solution {
public List<List<Integer>> combinationSum(int[] candidates, int target) {
(candidates);
List<List<Integer>> result=new ArrayList<>();
getCombinationSum(result,new ArrayList<Integer>(),candidates,target,0);
return result;
}
public void getCombinationSum(List<List<Integer>> res,ArrayList<Integer> cur,
int[] candidates,int target,int start){
if(target>0){
for(int i=start;i<&&target>=candidates[i];i++){
(candidates[i]);
getCombinationSum(res,cur,candidates,target-candidates[i],i);
(()-1);
}
}else if(target==0){
(new ArrayList(cur));
}
}
}