组合求和
given candidate set [2, 3, 6, 7] and target 7,
A solution set is:
[[7],[2, 2, 3]]
题目描述:
给定一个目标值,和一集合,找出集合中所有的组合序列(序列中元素的和为target)
思路分析:
求排列组合问题,使用回溯法。
代码:
public List<List<Integer>>combinationSum(int[]candidates,int target){
List<List<Integer>>res=new ArrayList<>();
List<Integer>list=new ArrayList<>();
if(candidates==null||candidates.length==0)
return res;
Arrays.sort(candidates); //进行排序,方便后面进行剪枝
backtracking(candidates,0,0,res,list,target);
return res;
}
public void backtracking(int[]candidates,int start,int sum,List<List<Integer>>res,List<Integer>list ,int target){
if(sum==target){
res.add(new ArrayList<>(list));
return ;
}
for(int i=start;i<candidates.length;i++){
if(sum+candidates[i]<=target){
list.add(candidates[i]);
backtracking(candidates,i,sum+candidates,res,list,target);//start更新为i,表示可以重复取同一个元素
list.remove(list.size()-1);
}else{
break;
}
}
}