[英]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.