【问题标题】:Create all variations from an array without repetition [C#]从数组中创建所有变体而不重复 [C#]
【发布时间】:2020-06-22 12:45:26
【问题描述】:

假设我有一个这样的数组:

string[] separatingStrings = {"Hello","Hi"};

我想在另一个数组上得到所有这些结果

result[0] = Hi
result[1] = Hello
result[2] = Hi Hello
result[3] = Hello Hi

如您所见,这是 4 个结果。如果我输入三个元素,我总共会得到 15 个结果。

STRING 数组示例:{"11", "22", "33"}

result[0] = 11
result[1] = 22
result[2] = 33
result[3] = 11, 22
result[4] = 11, 33
result[5] = 22, 11
result[6] = 22, 33
result[7] = 33, 11
result[8] = 33, 22
result[9] = 11, 22, 33
result[10] = 11, 33, 22
result[11] = 22, 11, 33
result[12] = 22, 33, 11
And so on... (It's not necessary to have that order, i just want every possible variation (without repeating the same value on the index) on another array)

我自己尝试过,但显然我失败了。我尝试通过互联网搜索,但每个人都在使用 INT 变量或将字符串拆分为字符。

谢谢大家,感谢任何帮助。

【问题讨论】:

  • 输入数组可以包含重复值吗?例如,如果输入数组是11, 11, 11,那么总结果是11 - 11, 11 - 11, 11, 11 ?
  • @LasseV.Karlsen 不,不需要重复
  • 那么输入数组无效吗?或者你的意思是你只想看到11作为输出?
  • @LasseV.Karlsen 嗯,是的,我只是想让所有这些“组合”在一个字符串中聚集在一起,使用 string.join 并可能用 # 分隔所有内容。 %%% 简短示例:string[] separatorStrings = {"11","22"};必须给我另一个数组的结果,该数组具有以下所有内容:{“11”,“22”,“11 22”,“22 11”} 如果您不明白我的意思,请告诉我,谢谢您的光临和帮助
  • 我对帖子进行了一些修改,以便于理解

标签: c# arrays combinations permutation variations


【解决方案1】:

您是否尝试过将每个字符串分配给特定整数,然后执行与处理整数相同的过程?

【讨论】:

  • 我不会说英语,所以如果我弄错了,我很抱歉,但如果你的意思是如果我尝试使用整数将所有这些函数转换为使用字符串,我试过了,但他们会给错误,软件无法编译。
  • 哈哈我着急删了,我来CTRL+Z吧
  • 这是一个,它有效但只显示排列,这意味着它不会显示 11、22 和 33,但它只会使排列的大小与给定的元素数量相同。
  • public static IEnumerable Permutations(int start, int count) { if (count == 0) yield break; var array = Enumerable.Range(start, count) .ToArray(); if (count > 1) { do yield return array;而(NextPermutation(参考数组)); } else 产生返回数组; }(第一部分)
  • 私有静态 bool NextPermutation(ref int[] array) { int k = array.Length - 2; while (k >= 0) { if (array[k]
【解决方案2】:

这听起来像是一个家庭作业问题,我认为人们不应该在这里给出完整的答案,但要开始,我会指出较长的列表包含较短的列表。即长度为 2 的列表包含长度为 1 的列表并添加一个元素,长度为 3 的列表包含长度为 2 的列表,等等。

【讨论】:

  • 如果这是一个家庭作业问题,我宁愿让我的教授帮助我,我不会在这里做。如果我没有正确理解您,我已经这样做了,但是我做错了,我得到的是“a,ab,a,ab”而不是“a,ab,b,ba”,我试图通过制作来修复它使用两个索引,一个用于左侧的字母,另一个用于右侧的字母。问题是它会解决这个问题,但不是当有 3 个元素时。我整个上午都在尝试寻求解决方案,但无法解决,所以我来这里寻求帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 2023-04-05
  • 2016-05-02
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
相关资源
最近更新 更多