关于获取所有排列方式的算法

今天又见有人问所有排列方式的问题,便随手写了个:

    static IEnumerable<IEnumerable<int>> GetAllSequence(int n)

    {

        if (n == 1)

        {

            return Enumerable.Range(0, 1).Select(_ => new int[] { 1 });

        }

        else

        {

            var num = Enumerable.Range(n, 1);

 

            return from seq in GetAllSequence(n - 1)

                    from count in Enumerable.Range(0, n)

                    select seq.Take(count).Concat(num).Concat(seq.Skip(count));

        }

    }

 

记得以前也写过过关于这个算法,搜了一下,是篇08年的老文章——一道关于排列组合的算法题。看了一下,虽然方法基本上是一样的,以前的代码写得比较青涩。看来这几年编程水平还是有点提高的。^_^

原文地址:https://www.cnblogs.com/TianFang/p/2174124.html