【问题标题】:permutation of array items数组项的排列
【发布时间】:2016-10-20 14:27:11
【问题描述】:

如何获得计数为 2 的字符串数组的组合?即。

List<string> myString = {"a", "b", "c", "d", "f"};

排列看起来像这样:

ab ac ad af ba bc bd bf ca cb cd cf 等等……

我不知道如何开始这个算法。如果有帮助,我宁愿做一个循环而不是递归,因为在我的实际实现中,我必须为排列的项目分配一个值,并将每个项目与另一个项目进行比较并选择最高的。

【问题讨论】:

  • 通常最好将“C#”之类的内容放入标签而不是主题行。
  • 谢谢,搜索引擎会不会因为它出现在标题标签中而更好地找到它?
  • 我不会担心太多。搜索引擎的索引非常好。让 SO 团队担心优化它。 :)
  • 准确的说不能用这样的语法来初始化一个List,使用List&lt;string&gt; myString = new List&lt;string&gt; { "a", "b", "c", "d", "f" };

标签: c# algorithm permutation


【解决方案1】:

使用 Linq:

var result = 
    from a in myString
    from b in myString
    where a != b
    select a + b;

【讨论】:

    【解决方案2】:

    不使用 LINQ

    List<string> myString = {"a", "b", "c", "d", "f"};
    List<String> result = new List<String> ();
    for (int i = 0; i < myString.Count; i++)
    {
        for (int j = 0; j < myString.Count; j++)
        {
            if (i == j)
                continue;
            result.Add(myString[i] + myString[j]);
        }
    }
    

    【讨论】:

    • 第二个for loop 应该有j++ 而不是i++
    【解决方案3】:

    没有 LINQ,您可以使用嵌套循环:

    var permutations = new List<string>();
    for(int i = 0; i < myString.Count; i++) 
    {
        for(int j = 0; j < myString.Count; j++)
        {
            if(i == j)
                continue;
    
            var permutation = string.Format("{0}{1}", myString[i], myString[j]);
            permutations.Add(permutation);
        }
    }
    

    【讨论】:

    • 如果我没记错的话,通过让i &lt; myString.Count - 1 循环少一个元素,你需要i &lt;= myString.Count - 1i &lt; myString.Count
    【解决方案4】:

    补充前面的答案:

            string[] arreglo = new string[6];
            arreglo[0] = "a";
            arreglo[1] = "b";
            arreglo[2] = "c";
            arreglo[3] = "d";
            arreglo[4] = "e";
            arreglo[5] = "f";
    
            var permutations = new List<string>();
            for (int i = 0; i < arreglo.Length; i++)
            {
                for (int j = 0; j < arreglo.Length; j++)
                {
                    for (int k = 0; k < arreglo.Length; k++)
                    {
                        for (int l = 0; l < arreglo.Length; l++)
                        {
                            for (int m = 0; m < arreglo.Length; m++)
                            {
                                for (int n = 0; n < arreglo.Length; n++)
                                {
                                    if (i ==j ||j == k||i == k||k == l||i == l||j == l||i == m||j == m||k == m||l == m||i == n||j == n||k == n||l == n||m == n)
                                        continue;
    
                                    var permutation = string.Format("{0}{1}{2}{3}{4}{5}", arreglo[i], arreglo[j], arreglo[k], arreglo[l], arreglo[m],arreglo[n]);
                                    permutations.Add(permutation);
                                }
                            }
                        }
                    }
                }
            }
    
            foreach(var element in permutations)
            {
                Console.WriteLine(element);
            }
            Console.ReadLine();
    

    【讨论】:

      猜你喜欢
      • 2017-06-28
      • 1970-01-01
      • 2011-02-24
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      相关资源
      最近更新 更多