C# 无重复排列
我是C语言的初学者,我正在寻找一个代码来返回集合的所有可能排列,例如{1,1,2},而不重复:{112,121,211}。我找到了以下链接,但我不知道如何使用它 我试过的代码如下。例如,当我尝试获得111的排列时,它返回所有可能的重复排列,即6个111。但我在寻找一些不重复的排列方式。更详细地说,111只是一个排列而不是六个排列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
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;
}
}