private void method(){
char[] data = "abcdefghiABCDEFGHI0123456789".toCharArray();
// loop and print each time
}
С вашим заданным вводом существует 3.43731350804×10E40
комбинаций. (Результат написан словами eighteen quadrillion fourteen trillion three hundred ninety-eight billion five hundred nine million four hundred eighty-one thousand nine hundred eighty-four
.) Если я правильно помню, математика - это как
1 + x + x^2 + x^3 + x^4 + ... + x^n = (1 - x^n+1) / (1 - x)
в вашем случае
28 + 28^2 + 28^3 + .... 28^28
, потому что у вас будет
28 комбинаций для строк длиной один
28 * 28 комбинаций для строк длиной два
28 * 28 * 28 комбинаций для строк длиной три
...
28 ^ 28 комбинаций для строк длиной 28
Чтобы распечатать их все, потребуется время.
Один из способов, который я могу придумать, - это использовать библиотеку Generex, Java библиотеку для генерации String, соответствующей заданному регулярному выражению.
Generex github . Дополнительную информацию см. На их странице.
Generex maven repo . Загрузите jar-файл или добавьте зависимость.
Использование generex несложно, если вы каким-то образом знакомы с регулярным выражением.
Пример с использованием только первых 5 символов, которые будут иметь 3905 возможных комбинаций
public static void main(String[] args) {
Generex generex = new Generex("[a-e]{1,5}");
System.out.println(generex.getAllMatchedStrings().size());
Iterator iterator = generex.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
Значение [a-e]{1,5}
любая комбинация символов a, b, c, d, e wit минимальная длина 1 и максимальная длина 5
вывод
a
aa
aaa
aaaa
aaaaa
aaaab
aaaac
aaaad
aaaae
aaab
aaaba
aaabb
aaabc
aaabd
aaabe
aaac
....
eeee
eeeea
eeeeb
eeeec
eeeed
eeeee