我想知道以下算法的大哦
public List<String> getPermutations(String s){
if(s.length()==1){
List<String> base = new ArrayList<String>();
base.add(String.valueOf(s.charAt(0)));
return base;
}
List<String> combos = createPermsForCurrentChar(s.charAt(0),
getPermutations(s.substring(1));
return combos;
}
private List<String> createPermsForCurrentChar(char a,List<String> temp){
List<String> results = new ArrayList<String>();
for(String tempStr : temp){
for(int i=0;i<tempStr.length();i++){
String prefix = tempStr.substring(0, i);
String suffix = tempStr.substring(i);
results.add(prefix + a + suffix);
}
}
return results;
}
这就是我认为的 getPermutations 被称为 n 次,其中 n 是字符串的长度。我的理解是 createPermutations 是 O(l * m) 其中 l 是列表 temp 的长度,m 是 temp 中每个字符串的长度。
但是,由于我们正在查看最坏情况分析,因此 m<=n 和 l<= n!。在每次递归调用中,临时列表的长度都会不断增长,temp 中每个字符串中的字符数也会不断增长。
这是否意味着这个算法的时间复杂度是O(n * n! *n)。还是 O(n * n * n) ?