C# 无重复排列

C# 无重复排列,c#,C#,我是C语言的初学者,我正在寻找一个代码来返回集合的所有可能排列,例如{1,1,2},而不重复:{112,121,211}。我找到了以下链接,但我不知道如何使用它 我试过的代码如下。例如,当我尝试获得111的排列时,它返回所有可能的重复排列,即6个111。但我在寻找一些不重复的排列方式。更详细地说,111只是一个排列而不是六个排列 class Program { private static void Swap(ref char a, ref char b) { i

我是C语言的初学者,我正在寻找一个代码来返回集合的所有可能排列,例如{1,1,2},而不重复:{112,121,211}。我找到了以下链接,但我不知道如何使用它

我试过的代码如下。例如,当我尝试获得111的排列时,它返回所有可能的重复排列,即6个111。但我在寻找一些不重复的排列方式。更详细地说,111只是一个排列而不是六个排列

class Program
{
    private static void Swap(ref char a, ref char b)
    {
        if (a == b) return;

        a ^= b;
        b ^= a;
        a ^= b;
    }

    public static void GetPer(char[] list)
    {
        int x = list.Length - 1;
        GetPer(list, 0, x);
    }

    private static void GetPer(char[] list, int k, int m)
    {
        if (k == m)
        {
            Console.Write(list);
        }
        else
            for (int i = k; i <= m; i++)
            {
                   Swap(ref list[k], ref list[i]);
                   GetPer(list, k + 1, m);
                   Swap(ref list[k], ref list[i]);
            }
    }

    static void Main()
    {
        string str = "sagiv";
        char[] arr = str.ToCharArray();
        GetPer(arr);
    }
}

由于您没有发布任何代码,因此只能猜测。但是,如果你把问题陈述分解开来,那么听起来好像只有一个问题,那就是重复数据消除。这是一个需要解决的小问题。以下是一种方法:

string dedupe = new string(input.ToCharArray().Distinct().ToArray()); 

字符串重复数据消除现在只包含原始字符串输入中的唯一字符

我终于找到了我要找的代码

公共静态void permuteint[]ps,int start,int n {


}

谷歌搜索第一次命中-我尝试过,但当我测试11123344或111{1,1,2}不是集合时,它返回错误的解决方案。@M.Mohebbi只需在通过ABC时使用解决方案,然后映射结果a->1,B->1,C->2。
//doSomething(ps);
int tmp = 0;
if (start < n) {
  for (int i = n - 2; i >= start; i--) {
    for (int j = i + 1; j < n; j++) {
      if (ps[i] != ps[j]) {
        // swap ps[i] <--> ps[j]
        tmp = ps[i];
        ps[i] = ps[j];
        ps[j] = tmp;

        permute(ps, i + 1, n);
      }
    }

    // Undo all modifications done by
    // recursive calls and swapping
    tmp = ps[i];
    for (int k = i; k < n - 1;)
      ps[k] = ps[++k];
    ps[n - 1] = tmp;
  }
}