组合总和

题目描述:给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字为target的组合。

candidates 中的数字可以无限制重复被选取。

说明

所有数字(包括 target)都是正整数。

解集不能包含重复的组合。

示例:输入: candidates = [2,3,6,7], target = 7,

所求解集为:

[

  [7],

  [2,2,3]

]

java代码

class Solution {

    private List> res = new ArrayList<>();

    private int[] candidates;

    private int len;


    private void findCombinationSum(int residue,int start,Stack pre) {

        if(residue < 0) return;

        if(residue == 0) {

            res.add(new ArrayList<>(pre));

            return;

        }

        for(int i=start;i

            pre.add(candidates[i]);

            findCombinationSum(residue-candidates[i],i,pre);

            pre.pop();

        }

    }

    public List> combinationSum(int[] candidates, int target) {

        int len = candidates.length;

        if(len == 0) return res;

        this.len = len;

        this.candidates = candidates;

        findCombinationSum(target,0,new Stack<>());

        return res;

    }

}

你可能感兴趣的:(组合总和)