Java 递归计算字符串的所有可能排列
我试图在Java中使用递归计算给定字符串的所有可能排列。然而,我不知道我的代码出了什么问题 这是我的算法:Java 递归计算字符串的所有可能排列,java,string,recursion,permutation,Java,String,Recursion,Permutation,我试图在Java中使用递归计算给定字符串的所有可能排列。然而,我不知道我的代码出了什么问题 这是我的算法: publicstaticarraylistcomputeablepermutations(stringstr){ ArrayList perms=新的ArrayList(); //基本情况 如果(str.length()==1) perms.add(str); 否则{ //在字符串上循环 对于(int i=0;i
publicstaticarraylistcomputeablepermutations(stringstr){
ArrayList perms=新的ArrayList();
//基本情况
如果(str.length()==1)
perms.add(str);
否则{
//在字符串上循环
对于(int i=0;i
有几个问题:
String sub=str.substring(i+1,str.length())代码>忽略第一个字符
i
之后的任何内容视为保持不变的子字符串“块”,而为了生成置换,我们应该在字符串其余部分的任意两个字符之间插入当前(第一个)字符,并对每个置换执行此操作s=str.charAt(i)+s代码>在#2中重复相同的错误
publicstaticarraylistcomputeablepermutations(stringstr){
ArrayList perms=新的ArrayList();
如果(str.length()==1){
perms.add(str);
}否则{
字符串chr=str.substring(0,1);
字符串rest=str.substring(1);
ArrayList子项=计算所有可能项(rest);
for(字符串s:子项){
对于(int j=0;j,我建议使用Set perms=new HashSet();
来避免重复的排列。使用ArrayList
,对于aaa
等输入,您会得到6次相同的排列。如果您的输入可能多次包含相同的字符,您应该使用Set。这是否回答了您的问题?
public static ArrayList<String> computeAllPossiblePermutations(String str) {
ArrayList<String> perms = new ArrayList<>();
if (str.length() == 1) {
perms.add(str);
} else {
String chr = str.substring(0,1);
String rest = str.substring(1);
ArrayList<String> subPerms = computeAllPossiblePermutations(rest);
for (String s : subPerms) {
for (int j = 0; j <= s.length(); j++) {
String newPerm = s.substring(0,j) + chr + s.substring(j);
perms.add(newPerm);
}
}
}
return perms;
}