1234567七个字符要求获取所有的符合条件的排列
比如
1234576
1234657
1234675
就是无排序..

解决方案 »

  1.   

    1,2,3,4,5,6,7放在有环链里,拿出来一个就POP掉一个
    放在无环List里,从有环链的长度区间RANDOM一个值,有环链指针加个这个值,再取一个
    ......
    取完以后List就是个无排列
      

  2.   

    List<int[]> list = new List<int[]>();
    for (int i = 0; i < 7; i++)
    {
    for (int j = 0; j < 7; j++)
    {
    if (i != j)
    {
    int[] array = new int[7]{1, 2, 3, 4, 5, 6, 7};
    int n = array[i];
    array[i] = array[j];
    array[j] = n;
    list.Add(array);
    }
    }
    }
      

  3.   

    IEnumerable<char[]> 排列(char[] input, int fromIndex, int toIndex)
        {
            if (fromIndex < toIndex)
            {
                char m = input[fromIndex];
                foreach (char[] right in 排列(input, fromIndex + 1, toIndex))
                {
                    yield return right;                for (int i = fromIndex + 1; i <= toIndex; i++)
                    {
                        char[] cc = new char[right.Length];
                        right.CopyTo(cc, 0);
                        cc[fromIndex] = cc[i];
                        cc[i] = m;
                        yield return cc;
                    }
                }
            }
            else
                yield return input;        yield break;
        }
      

  4.   

    例如你可以使用它:        foreach (char[] result in 排列("123".ToCharArray(), 0, 2))
            {
                foreach (char c in result)
                    Response.Write(c);
                Response.Write("<br />");
            }
      

  5.   

    或者: foreach (char[] result in 排列("1234567".ToCharArray(), 0, 6))
        ..........用 c# 写,代码还是很简单的。