Java - 任何人都可以为我解释这个排列代码吗?

时间:2017-02-01 15:55:03

标签: 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”..在代码中,这个字符串的长度减少,以便我们最终会达到基本情况?我看到我们总是把它当作“abc”让我觉得..我错过了什么?

1 个答案:

答案 0 :(得分:1)

关键是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