private void helper(int[] candidates, int idx, int target, List<Integer> tempList, List<List<Integer>> result) {

    System.out.println(tempList);

    if (target < 0 || idx < 0) {
      return;
    }

    if (target == 0) {
      result.add(new ArrayList<Integer>(tempList));
    }

    for (int i = idx ; i >= 0 ; i--) {
      tempList.add(candidates[i]);
      helper(candidates, i, target - candidates[i], tempList, result);
      tempList.remove(tempList.size() - 1);
    }
  }