您的位置:首页 > 编程语言 > Java开发

JAVA给出对应字符串所有排列组合

2017-06-22 16:10 316 查看

JAVA给出对应字符串所有排列组合

之前看到一题:求字符串的所有排列组合,例如字符串abc,有以下几种排列组合

[acb, bca, abc, cba, bac, cab]

后面考虑到遇到如果有重复字符,普通递归方法会将重复排列组合输出

之后就考虑到使用集合,元素不重复集合,这里使用了HashSet,并且让整个方法直接返回一个排列组合的集合。

public static void main(String[] args) {
Set<String> set = new HashSet<>();
String str = "abcc";
set = RollList(str,0);
System.out.println(set);
}

public static Set<String> RollList(String str,int i){
Set<String> set = new HashSet<>();
if (i>=(str.length()-1)) {
set.add(str);
return set;
}
char[] charArray = str.toCharArray();
String now = "";
//将第i个元素开始,与后面所有元素都换一次,就能得到所有组合
//例如,abc,i=0,表示,第一个元素从0开始换,得到abc,bac,cba的组合,然后再去算bc,ac,ba的所有组合
for (int k=i; k<str.length(); k++){
char temp = charArray[i];
charArray[i] = charArray[k];
charArray[k] = temp;
//交换完后,处理后续,处理完后,再将两数还原位置,使得每次都是以abc的顺序进行交换
now = String.valueOf(charArray);
set.addAll(RollList(now,(i+1)));
temp = charArray[i];
charArray[i] = charArray[k];
charArray[k] = temp;
}
return set;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 递归