升序列表排列

Har*_*rry 3 c# algorithm recursion list permutation

我试图获得列表的所有预定义长度排列,仅按升序排列.

For example, take the set:  "ABCDE"
I'd like the returning result to be:
ABC, ABD, ABE, ACD, ACE, ADE, BCD, BCE, BDE, CDE
Run Code Online (Sandbox Code Playgroud)

换句话说,"B"永远不会出现在"A"(升序)之前,但我想要满足这一要求中的每一个变化.

我不想使用LINQ,我正在试图找出实现这个的最快方法(速度是这个应用程序中的一个因素).

到目前为止,我有一个字符列表列表:

List<List<char>> Combinations;
Run Code Online (Sandbox Code Playgroud)

内部"List"将是"ABC"(每个字母为char)的组合,外部列表将是所有组合的列表.

每个结果集的长度(上例中为3)需要是动态的,所以我想我需要某种递归...我只是想不出如何实现它.

任何帮助将不胜感激!

编辑

到目前为止,这就是我所拥有的(我觉得我已经接近了......我只是无法让它真正构建最终列表(联盟不起作用 - 我使用它是不正确的?):

    private List<List<char>> AscendingPermute(List<char> InMovements, int Combinations)
    {
        List<List<char>> Ret = new List<List<char>>();

        for(int i = 0; i <= InMovements.Count - Combinations; i++)
        {
            if(Combinations <= 1){
                Ret.Add(new List<char>() {InMovements[i] });
                return Ret;
            }
            else
            {
                Ret.Union(AscendingPermute(InMovements.GetRange(1, InMovements.Count - 1), Combinations - 1));
            }
        }

        return Ret;
    }
Run Code Online (Sandbox Code Playgroud)

我是在正确的轨道上吗?我错过了什么?

谢谢!

zmb*_*mbq 5

因此,您希望所有可能的k元素都来自一组n个元素,并且您希望每个k元素列表按升序排列?

看看这里:从n返回k个元素的所有组合的算法