java - 有人可以解释一下这段代码吗?排列码

标签 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 < n; i++){
           permutations(prefix + s.charAt(i), s.substring(0, i) + s.substring(i+1, n));
        }
    }
}

最佳答案

方法permutations采用字符串前缀和字符串s作为其参数。 int 类型n 被设置为字符串s 的长度。 (字符串的长度是它包含的字符数)。

现在我们继续讨论 if-else 语句。 if语句的意思是,如果s的长度为0,即s是一个空字符串,不包含任何信息,那么我们只需将字符串前缀打印到控制台即可。然后该方法将跳过 else 部分并执行 permutations 方法之后的代码。

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

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

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

关于java - 有人可以解释一下这段代码吗?排列码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13735065/

相关文章:

java - 当 IntelliJ 找不到 Javadoc URL 末尾的 _ 或 __ 时,如何让 IntelliJ 检查它们?

java - 在引用变量上调用方法与在新对象上调用方法

java - Java中通过层处理嵌套异常的最佳方法

c++ - 用户应用程序中的递归重试是否危险?

python - 重新排序列表以最大化相邻元素的差异

algorithm - 生成某些排列

c - 排列字符串以使模式匹配

java - 非泛型类中的泛型方法

java - stackoverflow错误递归平方根

java - AVL 树最大和最小节点