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

标签 java recursion time-complexity runtime

我明白了!因为第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. }

最佳答案

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

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

关于java - 为什么时间复杂度是n*n*n!对于以下算法打印字符串的所有排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59889849/

相关文章:

java - 我们可以使用junit编写功能测试吗?

java - 在调用之间保留递归函数的堆栈位置

java - n-顶点子图枚举的时间复杂度

algorithm - 用大哦符号计算算法的时间复杂度

recursion - LISP-- 递归回文

arrays - 面试题: Even and odd elements at even and odd positions (keep elements order)

java - 如何将 Image View 和 TexView 左右对齐?

java - 如何查看 java.util.PriorityQueue 的尾部?

java - 使线程以正确的方式工作

c - 使用递归查找数组的最小和最大元素的程序