public void dfs(int[] candidates, int target, int sum, int index){
        if(sum > target) return;
        if(sum == target){
            result.add(new ArrayList<Integer>(single));
            return;
        }

        while(index < candidates.length){
            single.add(candidates[index]);
            dfs(candidates, target, sum + candidates[index], index);
            single.remove(single.size() - 1);
            index++;
        }
    }