C# 获取所有可能的单词组合

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,每个单词组合都需要使用(即使有很多) 我怎样才能做到这一点 编辑: 谢谢你的回答。这不是一项任务。只是我忘记了密

我有一个n个单词的列表(假设26个)。现在我想得到所有可能组合的列表,但每行最多有k个单词(假设为5个)

所以当我的词表是:aaa,bbb,…,zzz 我想得到:

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=指数;
而(iif(indexy)您可能会发现该函数满足您的需要。不幸的是,该函数仅适用于包含3个字符串的列表。任何较大的字符串都会开始丢失组合。例如:ABCD将为您提供ABCD、ABC、BCD,但它不提供ACD