Java 有人能解释一下这个代码吗?置换码
我正在做一个项目。我在Interwebz上找到了这个关于排列的代码。我想用它作为编写自己代码的基础。然而,我并不真正理解代码中发生了什么。谁能帮我解释一下代码到底在做什么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
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
条件,则该方法将使用新定义的字符串再次执行。这将在循环中继续,直到