C# 获取所有可能的单词组合
我有一个n个单词的列表(假设26个)。现在我想得到所有可能组合的列表,但每行最多有k个单词(假设为5个) 所以当我的词表是:aaa,bbb,…,zzz 我想得到:C# 获取所有可能的单词组合,c#,recursion,combinatorics,combinations,C#,Recursion,Combinatorics,Combinations,我有一个n个单词的列表(假设26个)。现在我想得到所有可能组合的列表,但每行最多有k个单词(假设为5个) 所以当我的词表是:aaa,bbb,…,zzz 我想得到: aaa bbb ... aaabbb aaaccc ... aaabbbcccdddeeefff aaabbbcccdddeeeggg ... 我想让它变为变量,这样它就可以与任何n或k值一起工作。 不应该有两个单词be,每个单词组合都需要使用(即使有很多) 我怎样才能做到这一点 编辑: 谢谢你的回答。这不是一项任务。只是我忘记了密
aaa
bbb
...
aaabbb
aaaccc
...
aaabbbcccdddeeefff
aaabbbcccdddeeeggg
...
我想让它变为变量,这样它就可以与任何n或k值一起工作。
不应该有两个单词be,每个单词组合都需要使用(即使有很多)
我怎样才能做到这一点
编辑:
谢谢你的回答。这不是一项任务。只是我忘记了密码的组合,我想确定我已经测试了所有的组合。虽然我没有26个密码部分,但这使我更容易解释我想要什么
如果有其他人有同样的问题,此链接可能会有帮助:你可以看看
但是,如果您需要获得大量的组合(数千万),您应该使用惰性计算来生成组合。我编写了一个简单的函数来实现这一点
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"})
私有字符串allState(int索引,字符串[]inStr)
{
字符串a=inStr[index].ToString();
int l=指数+1;
int k=l;
var result=string.Empty;
var t=仪表长度;
int i=指数;
而(i if(indexy)您可能会发现该函数满足您的需要。不幸的是,该函数仅适用于包含3个字符串的列表。任何较大的字符串都会开始丢失组合。例如:ABCD将为您提供ABCD、ABC、BCD,但它不提供ACD