我的書爲計算一個唯一字符串(見下面的代碼)的所有排列的函數提供以下代碼,並且說運行時間是O(n!),「因爲那裏是n!排列組合。「排列函數的運行時間
我不明白他們如何計算運行時間爲O(n!)。我假設他們的意思是「n」是原始字符串的長度。我認爲運行時間應該是O((n + 1)XY),因爲getPerms函數將被調用(n + 1)次,並且X和Y可以表示外循環和內循環的運行時間分別。有人可以向我解釋爲什麼這是錯誤的/書的答案是正確的?
謝謝。
public static ArrayList<String> getPerms(String str)
{
if (str == null)
return null;
ArrayList<String> permutations = new ArrayList<String>();
if (str.length() == 0)
permutations.add("");
return permutations;
char first = str.charAt(0); //first character of string
String remainder = str.substring(1); //remove first character
ArrayList<String> words = getPerms(remainder);
for (String word: words)
{
for (i = 0; i <= word.length(); i++)
{
String s = insertCharAt(word, first, i);
permutations.add(s)
}
}
return permutations;
}
public static String insertCharAt(String word, char c, int j)
{
String start = word.substring(0, i);
String end = word.substring(i);
return start + c + end;
}
來源:開裂的編碼訪談
@shekharsuman也就是說在書中提供的唯一代碼。我同意它不完整。 – randomUser47534