java排列(递归)的特殊解决方案?

a special solution to the java Permutation (recursion)?

按照课本,作者让我用一种特殊的方法来实现java中的排列。 更准确地说,存在两个函数:

public void static displayPermutation(String s) ----简单调用下一个函数displayPermutation("", String s); 从作者的角度来看,我们应该从逗号后面的 "s" 递归一步步移动一个字符到第一个的 String

但是我发现我的代码不起作用,尽管我尽了一切努力来实现这一点。 这是我的代码:

public static void displayPermuation(String s){
    displayPermuation("", s);
}
public static void displayPermuation(String s1, String s2){
    if(s2.length() == 0){
        System.out.println(s1);
        return;
    }else{
        for(int i = 0; i < s2.length(); i++){
            s1 = String.format(s1 + "%s", s2.charAt(i));
            s2 = String.format("%s%s", s2.substring(0, i), s2.substring(i + 1, s2.length()));
            displayPermuation(s1, s2);
        }
    }
}

请在下方找到此问题的解决方案。具有两个参数的函数 displayPermuation 将编写如下。 这不起作用的原因是您正在更改 for 循环中的 s1 和 s2,因此它会影响 for 循环迭代器。

假设

s2 = 'abc'

所以for循环运行了3次

然后我们让 s2 = bc。

所以长度变成2

如果您只是不更改 for 循环中 s2 的值,它将像下面的代码一样正常工作。

public static void displayPermuation(String s1, String s2) {
    if (s2.length() == 0) {
        System.out.println(s1);
        return;
    }
    for (int i = 0; i < s2.length(); i++) {
        displayPermuation(s1+s2.charAt(i), s2.substring(0,i)+s2.substring(i+1, s2.length()));
    }
}

希望对您有所帮助。