回溯---组合求和

组合求和

39. Combination Sum (Medium)

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;
        }
    }
}
posted @ 2019-07-01 14:55  yjxyy  阅读(201)  评论(0编辑  收藏  举报