繁体   English   中英

java中如何使用StringBuilder制作排列程序?

[英]How to make permutation program using StringBuilder in java?

我愿意创建一个程序来输出字符串的所有可能排列。 例如:

输入abc

Output

abc
acb
bac
bca
cab
cba

当我在 java 中使用 String 时,我能够得到这个 output,但我很好奇在 java 中使用 StringBuilder 做同样的事情。

我使用以下代码来获取此 output。

public class Test {
    public static void permutations(String str, String ans) {
        if (str.length() == 0) {
            System.out.println(ans);
            return;
        }
        for (int i = 0; i < str.length(); i++) {
            String newStr = str;
            newStr = newStr.substring(0, i) + newStr.substring(i + 1);
            permutations(newStr, ans + str.charAt(i));
        }
    }

    public static void main(String[] args) {        
            permutations("abc", ""); // using String
    }
}

我试图创建一个与我的排列方法结构相似的类似方法,并将 StringBuilder 作为参数并为其工作,但我无法这样做,它向我显示 StringIndexOutOfBound Exception 等。

我正在分享我在下面构建的方法。

    public static void permutationsStringBuilder(StringBuilder str, StringBuilder ans) {
        if (str.length() == 0) {
            System.out.println(ans);
            return;
        }
        StringBuilder newstr = new StringBuilder(str);
        for (int i = 0; i < str.length(); i++) {
            try {
                ans.append(str.charAt(i));
                newstr.deleteCharAt(i);
                permutationsStringBuilder(newstr, ans);
                ans.deleteCharAt(i);
                newstr.replace(i, i, ""+str.charAt(i));
            } catch (StringIndexOutOfBoundsException e) {
            }
        }
    }

Output 这个返回的是:

abc
ccb
bac
cca

请帮我解决一下这个。 帮助我使用 Java 的 StringBuilder 使其工作。

递归调用后,需要在循环迭代前将每个StringBuilder重置为原来的state。

  • 一个字符被附加到ans ,最后一个字符应该被删除。
  • newstr的第 i 个字符已被删除,因此应将其添加回正确的 position。
ans.append(str.charAt(i));
newstr.deleteCharAt(i);
permutationsStringBuilder(newstr, ans);
ans.deleteCharAt(ans.length() - 1);
newstr.insert(i, str.charAt(i));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM