Я хочу найти подмножества целого числа. Это первый шаг алгоритма "Сумма подмножеств" с обратным следом. Я написал следующий код, но он не возвращает правильный ответ:
BTSum(0, nums);
///**************
ArrayList<Integer> list = new ArrayList<Integer>();
public static ArrayList<Integer> BTSum(int n, ArrayList<Integer> numbers) {
if (n == numbers.size()) {
for (Integer integer : list) {
System.out.print(integer+", ");
}
System.out.println("********************");
list.removeAll(list);
System.out.println();
} else {
for (int i = n; i < numbers.size(); i++) {
if (i == numbers.size() - 1) {
list.add(numbers.get(i));
BTSum(i + 1, numbers);
} else {
list.add(numbers.get(i));
for (int j = i+1; j < numbers.size(); j++)
BTSum(j, numbers);
}
}
}
return null;
}
Например, если я хочу рассчитать подмножества множества = {1, 3, 5} Результатом моего метода является:
1, 3, 5, ********************
5, ********************
3, 5, ********************
5, ********************
3, 5, ********************
5, ********************
Я хочу, чтобы он создавал:
1, 3, 5
1, 5
3, 5
5
Я думаю, проблема в том, что часть list.removeAll(список); но я не знаю, как исправить это.