Я хочу найти подмножества набора целых чисел.Это первый шаг алгоритма «Сумма подмножеств» с возвратом.Я написал следующий код, но он не возвращает правильный ответ:
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;
}
Например, если я хочу вычислить подмножества set = {1, 3, 5} Результат моегометод:
1, 3, 5, ********************
5, ********************
3, 5, ********************
5, ********************
3, 5, ********************
5, ********************
Я хочу, чтобы он выдал:
1, 3, 5
1, 5
3, 5
5
Я думаю, что проблема в части list.removeAll (list);но я не знаю, как это исправить.