我发现了这篇文章,它非常努力地解释了递归解决方案来打印所有字符串。
public class Main {
private static void permutation(String prefix, String str) {
int n = str.length();
if (n == 0)
System.out.println(prefix);
else {
for (int i = 0; i < n; i++)
permutation(prefix + str.charAt(i),
str.substring(0, i) + str.substring(i + 1));
}
}
public static void main(String[] args) {
permutation("", "ABCD");
}
}
但我仍然无法理解我们开始弹出堆栈的部分。例如,递归一直进行到
permutation("ABCD","")
,其中基本情况得以满足并打印出ABCD
。但是现在会发生什么呢?我们从函数调用堆栈中弹出了permutation("ABC","D")
,那么我们该怎么做等等?请问有人能够帮忙解释一下吗?
此外,我需要一些关于时间复杂度的指示。不是完整的计算,而是一些提示。