В настоящее время я работаю над этой проблемой в качестве личного проекта.
В принципе:
- Учитывая массив элементов, например. Е = {1,2,а,б} и
- Учитывая число, K, например. К = 2
- Я хочу вернуть все Комбинации E размера K (E выбирает K)
- E.g. {{1,1}, {1,2}, {1,a}, {1,b}, {2,1}, ... , {b,1}, {b,2}, {b,a}, {b,b}}
Я уже достиг этого рекурсивно, используя следующую функцию:
char[] pool = new char[]{'1', '2', '3'};
public void buildStringRec(char[] root, int pos, int length){
for(char c : pool){
char[] newRoot = root.clone();
newRoot[pos] = c;
if(pos+1 < length){
buildStringRec(newRoot, pos+1, length);
} else{
System.out.println(String.valueOf(root));
}
}
}
Где pool
это Е, а length
это К.
Итак, мы вызываем: buildStringRec(new char[2], 0, 2);
и получаем
11
12
13
21
22
23
31
32
33
Можно ли это сделать итеративно? Я пытался понять, как бы я сделал это с переменной длиной.
Любая помощь будет оценена по достоинству! Если нужно, я могу опубликовать свой код как есть, но он так часто меняется из-за моих повторных попыток, что становится почти бесполезным, как только я его публикую.
Кроме того, я не хочу делать это с помощью Apache или String Builder, поскольку хочу понять КОНЦЕПЦИЮ того, как это сделать. Я не просто прошу код. Псевдокод хорош, если он четко объяснен.
Спасибо!
РЕДАКТИРОВАТЬ
Я использую этот сайт, чтобы проверить все представленные мне варианты: https://ideone.com/k1WIa6
Не стесняйтесь раскошелиться и попробовать!
E x E
), поэтому Я думаю, это просто проблема с терминологией. - person H W   schedule 02.07.2015E^K
(илиExE
для K=2). - person H W   schedule 03.07.2015