Java - 谁能为我解释这个排列代码?

标签 java recursion permutation

public  static void perm(String str) { 
   perm1(str,"");
}

private static void perm1(String str, String prefix) {
    int n = str.length();

    if (n == 0) StdOut.println(prefix);
    else {
        for (int i = 0; i < n; i++){
           String rem = str.substring(0,i) + str.substring(i+1);
           perm1(rem, prefix + str.charAt(i));
        }
    }
}

例如,如果我们的情况是“abc”..在代码中,该字符串的长度会减少,以便我们最终达到基本情况?我发现我们总是让 rem 因为它是“abc”..我错过了什么?

最佳答案

重点是 substring(int beginIndex, int endIndex) 方法采用子字符串作为 endIndex。例如,对于 i = 1,您将得到:

String str = "abc";
String s1 = str.substring(0, 1); // a
String s2 = str.substring(1 + 1); // c
String rem = s1 + s2; // ac

关于Java - 谁能为我解释这个排列代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41984117/

相关文章:

c++ - 打印所有可能的结果 C++?

java - 在 android 中共享图像时出错

haskell - 这个斐波那契序列函数是递归的吗?

java - 如何用汉诺塔调用递归

python - 如何递归模拟随机游走?无循环(Python)

permutation - 查找下一个具有特定汉明权重的数字

c - 排列字母

java - 如何使用 Bukkit 广播消息?

java - Hibernate:org.hibernate.criterion.ProjectionList 无法转换为 org.hibernate.Criteria

java - 如何在 jsp 页面和 servlet 之间共享数据