My code is printing duplicate code ,could you please have a look and let me know what am i missing here.Please find below my code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
public class SumItUp {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bufferedReader.readLine());
StringTokenizer tokenizer = new StringTokenizer(bufferedReader.readLine());
int[] input = new int[n];
for (int i = 0; i < input.length; i++) {
input[i] = Integer.parseInt(tokenizer.nextToken());
}
int target = Integer.parseInt(bufferedReader.readLine());
printSumCombination(input, target);
}
private static void printSumCombination(int[] input, int target) {
List<Integer> sumNumber = new ArrayList<>();
printSumCombinationHelper(input, target, sumNumber, 0);
}
private static boolean printSumCombinationHelper(int[] input, int target, List<Integer> sumNumber, int i) {
if (target == 0 && i <= input.length) {
printList(sumNumber);
input[i] = 0;
return false;
}
for (int j = 0; j < input.length; j++) {
int temp = input[j];
if (temp <= target && target - temp >= 0 && temp != 0) {
sumNumber.add(temp);
target = target - temp;
input[j] = 0;
boolean sumFound = printSumCombinationHelper(input, target, sumNumber, i + 1);
if (sumFound) {
return true;
}
target = target + temp;
input[j] = temp;
sumNumber.remove(Integer.valueOf(temp));
}
}
return false;
}
private static void printList(List<Integer> sumNumber) {
Collections.sort(sumNumber);
sumNumber.forEach(e -> System.out.print(e + " "));
System.out.println();
}
}