0
点赞
收藏
分享

微信扫一扫

39. 组合总和(Java、回溯、结果无限制带重)

林塬 2022-03-30 阅读 41
  1. 回溯框架
  2. base case:总和等于时添加res;大于时return
  3. 使用 start 递归调用时把 i 自身传入即可实现重复取,又可以避免结果中相同的结果不同顺序出现的可能
class Solution {
    List<List<Integer>> res = new LinkedList<>();
    LinkedList<Integer> track = new LinkedList<>();
    int sum = 0;
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        if(candidates.length == 0){
            return res;
        }
        backtrack(candidates,target,0);
        return res;
    }
    public void backtrack(int[] candidates,int target,int start){
        if(target == sum){
            res.add(new LinkedList(track));
            return;
        }
        if(sum >target){
                return;
            }
        for(int i = start;i<candidates.length;i++){
            track.add(candidates[i]);
            sum += candidates[i];
            backtrack(candidates,target,i);
            sum -= candidates[i];
            track.removeLast();
        }
    }
}
举报

相关推荐

0 条评论