我想獲得一個返回輸入字符串的所有排列的方法。我搜查了互聯網,發現其中大部分與Robert Sedgewick的代碼相似:http://introcs.cs.princeton.edu/java/23recursion/Permutations.java.html我得到的函數返回排列數組的難題
但是,我想返回排列,而不是打印它們。 羅伯特·塞奇威克的代碼被複制在這裏:
public class Permutations {
// print N! permutation of the characters of the string s (in order)
public static void perm1(String s) { perm1("", s); }
private static void perm1(String prefix, String s) {
int N = s.length();
if (N == 0) System.out.println(prefix);
else {
for (int i = 0; i < N; i++)
perm1(prefix + s.charAt(i), s.substring(0, i) + s.substring(i+1, N));
}
}
public static void main(String[] args) {
perm1("abcd");
}
}
而且通過自己從羅伯特·塞奇威克的重新編寫代碼如下:
import java.util.ArrayList;
public class Test {
public static ArrayList<String> permute(String prefix, String s){
int len = s.length();
ArrayList<String> list = new ArrayList<String>();
if(s.length() == 0)
list.add(prefix);
else
for(int i = 0; i < len; i++)
permute(prefix + s.charAt(i), s.substring(0, i) + s.substring(i+1, len));
return list;
}
public static void main(String[] args) {
String str = "abcd";
ArrayList<String> array = permute("", str);
System.out.print(array.size());
}
}
但我的代碼不返回排列。它什麼都不返回。我不知道爲什麼。誰能幫我?
+1因爲它解決了OP的問題,以最小的變化,但我還是建議[Markus的答案]( http://stackoverflow.com/a/16557660/1711796),因爲它不在每一步連接'ArrayList',所以效率更高。 – Dukeling
@Dukeling - 我同意,但我試着記住,這不是http://codereview.stackexchange.com/,我只是試圖顯示他出錯的地方。 – Craig
而這正是你應該做的,但這樣做有效率是解決問題的下一步(即使不是必需的) - 我總是嘗試比較解決方案的效率,並嘗試在我自己和其他人的答案中提及更有效的解決方案(或者以另一個答案的鏈接的形式,解釋或代碼)。請記住,超越是可接受的答案與好的/好的答案之間的區別。馬庫斯的答案是一個更好的**解決方案**,但你的答案更好**。 – Dukeling