【问题标题】:Creating string permutations创建字符串排列
【发布时间】:2009-04-16 21:44:08
【问题描述】:

为什么这不能产生正确数量的字符串排列?对于

perm("ABC", 3)

它应该打印 27 种不同的排列。

private static List<string> permutated = new List<string>(30000);

public static List<string> perm(string s, int k) { return comb(s, "", k); }

private static List<string> perm(string s, string prefix, int k)
{
    if (k == 0)
    {
        permutated.Add(prefix);
    }
    else 
    {
        for (int i = 0; i < s.Length; i++)
        {
            perm( s.Substring( i + 1 ), prefix + s[i], k - 1 );
        }
    }
    return permutated;
}

【问题讨论】:

  • 您的调试尝试向您展示了什么?你尝试过做什么?
  • ABC有6个排列,不是27个ABC,ACB,BAC,BCA,CAB,CBA
  • 其次,除了 return 它之外,您永远不会对 permuted 做任何事情。
  • 嘘,我需要组合,而不是排列。是的,我将其添加到列表中
  • 啊..好的,那么我如何生成所有可能的组合? AAA、BBB、CCC、ABA、ACA。我认为前突变是不同的,但组合有重复的字母

标签: c# .net permutation


【解决方案1】:

您已经在程序中计算combinations。对于comb("ABC", 3),应该有一个结果。

如果您想要permutations(六个结果),请将递归函数调用中的s.Substring( i + 1 ) 替换为s.Substring(0, i) + s.Substring(i+1)

如果您想要 27 个结果,只需传递 s 而不是 s.Substring( i + 1 )

【讨论】:

    猜你喜欢
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2011-04-20
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多