【发布时间】:2020-12-16 23:18:27
【问题描述】:
我有两个非常简单的数组,一个包含characters,另一个包含numbers。在不重复 numbers 数组中的任何值的情况下,我需要找到数组值的所有可能组合。给定以下两个数据集:
char[] characters = { 'a', 'b' };
int[] numbers = { 1, 2, 3 };
预期的输出是:
1a2a3
1a2b3
1b2a3
1b2b3
如果一个数字重复,它应该被计算第二次。例如,如果我们将numbers 数据集更改为1, 2, 2,则预期输出为:
1a2a2
1a2b2
1b2a2
1b2b2
我查看了许多演示使用递归的示例(在某些情况下使用了 Linq),以查找一个数组中值的所有可能组合,甚至是两个数组中的几个样本,但在所有我见过的样本,结果数据集是一对一的映射,例如a1, b1, a2, b2, a3, b3,这不是我需要的。
我尝试了几种不同的方法,但都没有奏效,它们也无法扩展,因此没有必要在此处发布这些方法,因为我一直放弃它们。按照以下思路思考:
foreach (char character in characters) {
foreach (int number in numbers) {
for (int i = characters.Length - 1; i > 0; i--) {
// Not scalable, probably why recursion is used as a solution.
}
}
}
由于某种原因,我无法让我的大脑将其移至递归。
如何创建两个数组中值的所有可能组合,其中两个数组的长度都是未知的,并且一个数组中的值不重复(除非在数据集本身中指定)?
注意:结果应存储在List<string> 中以供以后处理。
【问题讨论】:
-
字符是否保证唯一?只有数字可以重复吗?
-
@Idle_Mind 是的,字符总是唯一的,只能重复数字。
-
好的。所以本质上我们是在用唯一字符
{aa, ab, ba, bb}“计数”,计数序列的固定长度比数字数组的长度小一。然后我们将每个计数序列中的数字放在 numbers 数组中的每个数字之间。我相信我有一个适合你的解决方案,但大约需要一个小时我才能编写代码并对其进行测试。 -
@Idle_Mind 我很感兴趣 :)