为什么时间复杂度是n*n*n!对于下面的算法打印字符串的所有排列?

z4bn682m  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(308)

我明白你的意思!因为第7行必须执行n!程序打印字符串的所有排列的时间。n*n从哪里来?不是小于n吗!所以应该忽略。

1. void perm(String str){
2.    perm(str, "");
3.  }
4.
5. void perm(String str, String prefix){
6.     if(str.length() == 0){
7.         System.out.println(prefix);
8.     } else{
9.        for(int i = 0; i < str.length(); i++){
10.           String rem = str.substring(0, i) + 
                           str.substring(i + 1);
11.           perm(rem, prefix + str.charAt(i));
12.       }
13.    }
14. }
bpsygsoo

bpsygsoo1#

可能是因为字符串连接困难。尝试使用stringbuilder:

StringBuilder rem = new StringBuilder();
rem.append(str.substring(0, i)).append(str.substring(i + 1))
perm(rem.toString(), prefix + str.charAt(i));

相关问题