У меня есть список n слов (скажем, 26). Теперь я хочу получить список всех возможных комбинаций, но не более k слов в строке (пусть говорят 5)
Итак, когда мой список слов: aaa, bbb,..., zzz Я хочу получить:
aaa
bbb
...
aaabbb
aaaccc
...
aaabbbcccdddeeefff
aaabbbcccdddeeeggg
...
Я хочу сделать его переменной, чтобы он работал с любым значением n или k. Слова не должны быть дважды, и все комбинации должны быть приняты (даже если их очень много).
Как я мог достичь этого?
EDIT:
Спасибо за ваши ответы. Это не задание. Я просто забыл о комбинациях моего пароля, и я хочу быть уверенным, что у меня есть все проверенные комбинации. Хотя у меня нет 26 паролей, но это облегчило объяснение того, что я хочу.
Если есть другие люди с одинаковой проблемой, эта ссылка может быть полезной:
Создать массив комбинаций слов в С#
Вы можете взглянуть на this
Однако, если вам нужно получить большое количество комбинаций (в десятках миллионов), вы должны использовать ленивую оценку для генерации комбинаций.
Я написал простую функцию для этого
private string allState(int index,string[] inStr)
{
string a = inStr[index].ToString();
int l = index+1;
int k = l;
var result = string.Empty;
var t = inStr.Length;
int i = index;
while (i < t)
{
string s = a;
for (int j = l; j < k; j++)
{
s += inStr[j].ToString();
}
result += s+",";
k++;
i++;
}
index++;
if(index<inStr.Length)
result += allState(index, inStr);
return result.TrimEnd(new char[] { ',' });
}
allState(0, new string[] { "a", "b", "c"})