Я пытаюсь получить все возможные комбинации размера K из списка размера N.
У меня есть список, который принимает объекты "Человек", и я пытаюсь создать новый ArrayList, который будет заполнен со списком объектов. Каждый из списков будет представлять собой различную комбинацию объектов "Человек".
Простой пример с числами: Из списка, состоящего из 1,2,3, я хочу получить ArrayList, который выглядит следующим образом: [[1,2], [1,3], [2,3]]
Я бы тоже не возражал, если бы это выглядело так: [[1], [2], [3], [1,2], [1,3], [2,3]]
Вот мой код:
public void combination(List<Human> people, int k, ArrayList<List> result) {
if (people.size() < k) {
return;
}
if (k == 1) {
for (Human hum : people) {
List<Human> combinations = new ArrayList<Human>();
combinations.add(hum);
result.add(combinations);
}
}
else if (people.size() == k) {
List<Human> combinations = new ArrayList<Human>();
for (Human hum : people) {
combinations.add(hum);
}
result.add(combinations);
}
else if (people.size() > k) {
for (int i = 0; i < people.size(); i++) {
List<Human> combinations = new ArrayList<Human>();
combinations.add(people.get(i));
result.add(combinations);
combination(people.subList(i + 1, people.size()), k - 1, result);
}
}
}
Я использую последний метод на этом сайте в качестве ссылки: https://hmkcode.com/calculate-find-all-possible-combinations-of-an-array-using-java/
В настоящий момент я получаю правильное количество результатов в моем новом ArrayList, но каждый список внутри состоит только из одного человека.
Я очень подозреваю, что проблема заключается в последнем else if
, потому что мне трудно разобраться в рекурсии.
Пожалуйста, не стесняйтесь задавать любые вопросы или предлагать какие-либо другие реализации для этого.