Итак, вам нужны все возможные комбинации данной строки.
Итак, я взглянул на это, записал последовательность, которую вы хотели, с точки зрения индексов в данной строке:
"abc"
aaa = 000
aab = 001
aac = 002
aba = 010
abb = 011
abc = 012
aca = 020
acb = 021
acc = 022
baa = 100
... and so forth.
Это в основном считается от 0 до некоторого числа в некоторой базе. Число возможных комбинаций здесь равно 3 ^ 3, поэтому в основном вы рассчитываете до 27 в базе 3. В общем: пусть x будет длиной данной строки. Затем мы считаем от 0 до x ^ x в базе x.
Затем вы можете использовать числовое представление в базе x, чтобы найти n-ю комбинацию.
Я написал быстрое решение в Java:
static void combinations(String str) {
int base = str.length();
int combinations = (int) Math.pow(base, base);
for (int i = 0; i < combinations; i++) {
int c = i;
char[] arr = new char[base];
for (int j = arr.length-1; j >= 0; j--) {
arr[j] = str.charAt(c % base);
c /= base;
}
System.out.println(Arrays.toString(arr));
}
}
комбинаций («abc») дает мне:
aaa
aab
aac
aba
abb
abc
aca
acb
acc
baa
...
Вот возможное решение в C (впервые используя C):
#include <stdio.h>
#include <string.h>
#include <math.h>
int
main() {
char *str = "abc";
int len = strlen(str);
int combinations = len;
int j = 1;
while (j++ < len) {
combinations = combinations*len;
}
int i;
for(i = 0; i < combinations;i++) {
char arr[len];
int c = i;
int j;
for (j = len-1; j >= 0;j--) {
arr[j] = str[c % len];
c /= len;
}
printf("%s\n", arr);
}
return 0;
}