Java 有人能解释一下这个代码吗?置换码

Java 有人能解释一下这个代码吗?置换码,java,recursion,permutation,Java,Recursion,Permutation,我正在做一个项目。我在Interwebz上找到了这个关于排列的代码。我想用它作为编写自己代码的基础。然而,我并不真正理解代码中发生了什么。谁能帮我解释一下代码到底在做什么 public void permutations(String prefix, String s) { int n = s.length(); if (n == 0) System.out.println(prefix); else { for(int i = 0; i

我正在做一个项目。我在Interwebz上找到了这个关于排列的代码。我想用它作为编写自己代码的基础。然而,我并不真正理解代码中发生了什么。谁能帮我解释一下代码到底在做什么

public void permutations(String prefix, String s) {
    int n = s.length();
    if (n == 0)
        System.out.println(prefix);
    else {
        for(int i = 0; i < n; i++){
           permutations(prefix + s.charAt(i), s.substring(0, i) + s.substring(i+1, n));
        }
    }
}
public void置换(字符串前缀,字符串s){
int n=s.长度();
如果(n==0)
System.out.println(前缀);
否则{
对于(int i=0;i
置换(前缀+s.charAt(i),s.substring(0,i)+s.substring(i+1,n))

实际上,这个置换算法使用了

Switching current character with ith character.
假设我们有一个字符串
abc
。所以它的排列是:

abc、acb、bac、bca、cab、cba

我们可以发现
acb
只是在
abc
中用前缀
a
切换
b
c
。而
bca
只是在
bac
中用前缀
b
切换
c
a

然后我们用同样的思想递归地解决置换问题。

置换(前缀+s.charAt(i),s.substring(0,i)+s.substring(i+1,n))

实际上,这个置换算法使用了

Switching current character with ith character.
假设我们有一个字符串
abc
。所以它的排列是:

abc、acb、bac、bca、cab、cba

我们可以发现
acb
只是在
abc
中用前缀
a
切换
b
c
。而
bca
只是在
bac
中用前缀
b
切换
c
a


然后我们就用同样的思想递归地解决置换问题。

方法
置换
将字符串
前缀
和字符串
s
作为其参数。 正在将
int
类型
n
设置为字符串
s
的长度。(字符串的长度是它包含的字符数)

现在我们转到
if
-
else
语句。
if
语句表示,如果
s
的长度为0,也就是说,
s
是一个空白字符串,不包含任何信息,那么我们只需将字符串
前缀打印到控制台。然后,该方法将跳过
else
部分,并在
置换
方法之后执行代码

如果
If
语句的条件不满足,我们将运行
else
语句,对于字符串
s
中的每个字符,我们将在
前缀
的末尾追加(添加)该字符,例如,如果
前缀
最初是“hello”,而字符是“U”,我们将得到前缀为“helloU”的
prefix
。在完成对
s
中所有字符的追加后,我们将使用结果作为新的
前缀
字符串

对于另一个参数,字符串
s
,我们将使用字符串的一部分,从字符0(包括)到位置
i(不包括)的字符。请注意,字符串索引从0开始,一直到(字符串的长度-1)。我们还将从位置i+1(包括)的字符到字符串
s
中的最后一个字符提取字符串的一部分。我们将使用此结果作为新的
s
字符串


然后我们将再次调用该方法,如果满足
else
条件,则该方法将使用新定义的字符串再次执行。这将在循环中继续,直到不满足
else
条件,此时方法将停止运行,我们将继续下一段代码(如果存在)。

方法
置换
将字符串
前缀
和字符串
s
作为其参数。 正在将
int
类型
n
设置为字符串
s
的长度。(字符串的长度是它包含的字符数)

现在我们转到
if
-
else
语句。
if
语句表示,如果
s
的长度为0,也就是说,
s
是一个空白字符串,不包含任何信息,那么我们只需将字符串
前缀打印到控制台。然后,该方法将跳过
else
部分,并在
置换
方法之后执行代码

如果
If
语句的条件不满足,我们将运行
else
语句,对于字符串
s
中的每个字符,我们将在
前缀
的末尾追加(添加)该字符,例如,如果
前缀
最初是“hello”,而字符是“U”,我们将得到前缀为“helloU”的
prefix
。在完成对
s
中所有字符的追加后,我们将使用结果作为新的
前缀
字符串

对于另一个参数,字符串
s
,我们将使用字符串的一部分,从字符0(包括)到位置
i(不包括)的字符。请注意,字符串索引从0开始,一直到(字符串的长度-1)。我们还将从位置i+1(包括)的字符到字符串
s
中的最后一个字符提取字符串的一部分。我们将使用此结果作为新的
s
字符串

然后我们将再次调用该方法,如果满足
else
条件,则该方法将使用新定义的字符串再次执行。这将在循环中继续,直到