一道面试题,如下:有数组1,2,3,4,5,6,7。按照各种不同的顺序打印出来,其中4不能在第3位,3和5不能相邻。求最高效算法。

解决方案 »

  1.   

            static IEnumerable<string> Arrange(string source)
            {
                for (int i = 0; i < source.Length; i++)
                {
                    if (source.Length == 1)
                    {
                        yield return source;
                    }
                    else
                    {
                        foreach (var x in Arrange(source.Substring(0, i) + source.Substring(i + 1)))
                        {
                            yield return source[i] + x;
                        }
                    }
                }
            }
    foreach(string item in Arrange("1234567").Where(x => x[3] != "4" && x.IndexOf("35") == -1 && x.IndexOf("53") == -1))
    {
        Console.WriteLine(item);
    }