0
到目前爲止,我的代碼似乎讓我獲得了正確的結果。除了我遇到了問題。當我給它一個長度爲8個字符或更長的字符串時,它似乎並沒有結束。我已經有30億個組合,它仍然在運行。當我用較短的字符串嘗試該方法時,它終止並給出正確的輸出。我不知道還有什麼要嘗試,我會很感激任何提示。這裏是Java代碼:使用遞歸方法和Java的字符串排列
public static void permutation(String prefix, String str){
int n = str.length();
if (n == 0){
permutations++;
System.out.println(prefix);
System.out.println("Permutations: " + permutations);
}
else {
for (int i = 0; i < n; i++){
permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i + 1));
}
}
}
此排列計數假定您沒有重複字符。這也是計算階乘的一種非常低效的方式。 – khelwood
問問自己,一串長度* N *有多少個排列?這是** N!**。如果你有一串長度爲8的字符串,那麼你可以有40320個排列,所以顯然你的算法是錯誤的。 –
你只對整體感興趣嗎?或者你最終會對這些排列做些什麼?如果你只想要一個總數,你應該使用建議的答案,或者一個BigInteger版本。如果你想能夠使用排列,這是一個更難的問題。 –