我有以下代码来打印给定字符串的排列。[为简单起见,不要忘记我正在尝试的内容,假设字符串中没有重复的字符]
public static int count = 0;
public static void permute(String soFar, String strLeft) {
if(strLeft.length() == 1) {
soFar += strLeft;
System.out.println(++count + " :: " + soFar);
}
for(int i=0; i<strLeft.length(); i++) {
permute(soFar + strLeft.charAt(i), strLeft.substring(0,i) + strLeft.substring(i+1));
}
}
/**
* @param args
*/
public static void main(String[] args) {
String input = "abcd";
permute("",input);
}
我试图弄清楚这段代码的运行时间。
到目前为止我的想法链:试图写一个重复,
T(n) = n * T(n-1) + O(n) for n > 1
= 1 for n = 1
有n!排列,但递归调用的数量大于 n!。事实上,对于输入字符串为 "abcd" (即 4 个字符)的示例,对 permute 函数的调用次数为 65。
关于我应该如何查找此代码的运行时间的任何指示?