2016-04-29 96 views
-7

我之前問過這個問題,對於一些reaseon人說它重複! 我發現soultions都是無效 我想梅索德是這樣的:返回字符串的字符串排列方法[]

public String[] permutations(String str){//code} 

例如,如果我有一個字符串「abc」的輸出應該是: A,B,C,AB,AC ,ba,bc,ca,cb,abc,acb,bac,bca,cab,cba 我試圖將我從void找到的方法轉換爲String [],但我無法做到。它始終有錯誤

+1

請發表[最少,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – MikeCAT

+1

歡迎來到SO。顯示你的代碼併發布你所得到的錯誤。 – randominstanceOfLivingThing

+0

到目前爲止你有什麼? –

回答

0

請嘗試以下操作。我不知道你正在申請什麼類型(如果有的話),所以我只是沒有做。

public String[] permutations(String str) { 
    if (str.length() == 0) { 
     return new String[0]; 
    } else if (str.length() == 1) { 
     String[] s = new String[1]; 
     s[0] = str; 
     return s; 
    } 
    Set<String> permutations = new HashSet<>(); 
    for (int i = 0; i < str.length(); i++) { 
     char c = str.charAt(i); 
     String part = str.substring(0, i) + str.substring(i + 1); 
     String[] rem = permutations(part); 
     for (String s : rem) { 
      permutations.add(s); 
      for (int j = 0; j <= s.length(); j++) { 
       String t = s.substring(0, j) + c + s.substring(j); 
       permutations.add(t); 
      } 
     } 
    } 
    return permutations.toArray(new String[permutations.size()]); 
} 
+0

嗨,感謝發佈 解決方案比我的更好,但它跳過一些排列。在「abc」輸入的情況下,它跳過「bca」和「cba」 –

+0

編輯。對不起,現在應該是準確的。我只是將

+0

非常感謝,現在正在工作 –