【问题标题】:a special solution to the java Permutation (recursion)?java Permutation(递归)的特殊解决方案?
【发布时间】:2017-01-22 08:32:39
【问题描述】:

根据教科书,作者要求我用一种特殊的方法来实现java中的排列。 更准确地说,存在两个功能:

public void static displayPermutation(String s) ----就是调用下一个函数displayPermutation("", String s); 从作者的角度来看,我们应该使用递归将一个字符从逗号后的“s”逐步移动到第一个字符串。

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

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);
        }
    }
}

【问题讨论】:

  • “不工作”是什么意思?您预计会发生什么,实际结果是什么?
  • 在 for 循环的第一次迭代之后,字符串 s1s2 不再是您认为的那样。

标签: java recursion permutation


【解决方案1】:

请在下面找到此问题的解决方案。具有两个参数的函数 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()));
    }
}

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 2015-10-25
    • 1970-01-01
    • 2021-11-03
    • 2018-12-30
    相关资源
    最近更新 更多