我是一名java初學者,並試圖從java編程書籍中進行字符串排列實踐。我定義兩個方法:帶遞歸的字符串排列
public static void displayPermutation(String s)
public static void displayPermutation(String s1, String s2)
第一種方法只是調用displayPermutation(" ", s)
。第二種方法使用循環將字符從s2移動到s1,並用新的s1和s2遞歸調用它。基本情況是s2是空的並將s1打印到控制檯。
任何人都可以幫助我找到下面的代碼是什麼問題?
她的例子:
public static void displayPermutation(String s) {
displayPermuatation("", s);
}
private static void displayPermuatation(String s1, String s2) {
//base case: when s2 is empty, print s1
if (s2.isEmpty()) {
System.out.println(s1);
}
else {
for (int i = 0; i < s2.length(); i++) {
//move a char from s1 to s2, and recursively invokes it with
//new s1 and s2
s1 = s1 + s2.charAt(i);
s2 = s2.substring(0, i) + s2.substring(i+1);
displayPermuatation(s1, s2);
}
}
}
如果s = 「ABC」, 只打印: ABC ACB
似乎在displayPermuatation的第一次調用( 「」, 「ABC」 ),它不完成for循環.... 有什麼意見?
感謝下面的所有評論。我認爲我犯的錯誤是因爲傳遞對象作爲方法的參數實際上是傳遞引用。它不像原始數據(通過值傳遞)。更改對象時,將影響使用該對象的以下方法調用。
什麼應該是正確的結果,當S = 「ABC」? – fmodos
對不起,我忘了把它添加到帖子中。預期的結果是:abc,acb,bac,bca,cab,cba – Vortex
您是否嘗試過在調試器下運行它,或者將打印輸出放入displayPermutation例程中以查看它實際在做什麼(而不是您認爲它正在做什麼)?我想你可以用這些信息自己弄清楚。 – keshlam