2009-04-16 152 views
-1

爲什麼這不會產生正確數量的字符串排列?對於創建字符串排列

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; 
} 
+0

你的調試嘗試顯示了你什麼?你有什麼想要做的? – 2009-04-16 21:47:52

+1

ABC有6個排列,而不是27 ABC,ACB,BAC,BCA,CAB,CBA – 2009-04-16 21:49:48

回答

2

您的程序中已經計算出combinations。對於comb("ABC", 3)應該有一個結果。

如果您想要permutations代替(6個結果),請將遞歸函數調用中的s.Substring(i + 1)替換爲s.Substring(0, i) + s.Substring(i+1)

如果您需要27個結果,只需傳遞s而不是s.Substring(i + 1)