毎日のアルゴリズムの問題:19.7.22

1300 ワード

タイトル:
配列candidatesとターゲット数targetを指定し、candidatesのすべての数値とtargetの組合せを見つけます.
candidatesの各数字は、各組合せで1回しか使用できません.
例:
入力: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);
            }
        }
    }
}