每日算法题:19.7.22

题目:

给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的每个数字在每个组合中只能使用一次。

示例:

输入:candidates = [10,1,2,7,6,1,5], target = 8

输出:[[1, 7],[1, 2, 5],[2, 6],[1, 1, 6]]

代码:

public class Test14 {
    public List> combinationSum2(int[] candidates, int target) {
        Arrays.sort(candidates);
        List> result = new ArrayList<>();
        int index= 0;
        int sum = 0;
        List resultChild = new ArrayList<>();
        function(candidates,target,index,sum,result,resultChild);
        return result;
    }

    public void function(int[] candidates,int target,int index,int sum,List> result,List resultChild){
        if (sum>target) {
            return;
        }else if(sum==target){
            if (!result.contains(resultChild)) {
                result.add(resultChild);
            }
        }else{
            for (int i = index; i  temp = new ArrayList<>();
                temp.addAll(resultChild);
                temp.add(candidates[i]);
                function(candidates,target,i+1,sum+candidates[i],result,temp);
            }
        }
    }
}

 

你可能感兴趣的:(算法)