查找多个数组的所有可能组合

时间:2017-11-16 03:04:32

标签: c# arrays algorithm

我正在尝试编写算法,由于我缺乏编写复杂算法的经验,我在这里苦苦挣扎。因此,在这种情况下,我有n个字符数组,每个数组包含m个字符。我需要在数组之间生成每个可能的字符组合。

示例,我有以下数组:

arr1 = [2, 3]
arr2 = ['y', 1]
arr3 = [1]
arr4 = [2, 'u', 4]

使用上述数组,所有可能的组合都是:

2y12
2y1u
2y14
2112
211u
2114
3y12
3y1u
3y14
3112
311u
3114

可以有任意数量的n个数组,每个数组中有任意数量的字符。所以这个算法需要扩展。我认为递归解决方案可能是可行的,我无法理解这是如何工作的。这个问题与帖子Generating all Possible Combinations非常相似,除了我仍然没有看到如何使解决方案动态化以处理所述数组中包含任意数量元素的任意数量的数组。

我的解决方案将最终用C#编写,但您可以使用任何其他语言或伪代码来帮助我。

1 个答案:

答案 0 :(得分:1)

void Dodge(List<List<T>> domains)
{
    Fuski(domains, new List<T>());
}

void Fuski(List<List<T>> domains, List<T> vector)
{
    if (domains.Count == vector.Count)
    {
        Console.WriteLine(string.Join("", vector)); 
        return;
    }
    foreach (var value in domains[vector.Count])
    {
        var newVector = vector.ToList();
        newVector.Add(value);
        Fuski(domains, newVector);
    }
}