给一个字符串 然后写出这个字符串中的全部组合
比如 "abc"的组合有
cab
abc
cba
bac
bca
acb
实现的
算法如下
public static void main(String[] args) {
String orignerStr = "abc";
allSort(orignerStr);
}
static void allSort(String oriStr) {
char[] charArr = oriStr.toCharArray();
Set<String> finalSet = new HashSet<String>();
List<StringBuffer> fianlList = sortList(null, 0, oriStr.length(), charArr);
// 根据set中元素不可以重复,去除重复值
for (StringBuffer buffer : fianlList) {
finalSet.add(new String(buffer));
}
fianlList = null;
// 打印结果值
for (String str : finalSet) {
System.out.println(str);
}
}
static List<StringBuffer> sortList(List<StringBuffer> list, int count, int length, char[] arr) {
if (count < length) {
List<StringBuffer> nextList = new LinkedList<StringBuffer>();
String indexStr = String.valueOf(arr[count]);
if (count == 0) {
nextList.add(new StringBuffer(indexStr));
}
else {
StringBuffer tempBuffer;
for (StringBuffer buffer : list) {
for (int i = 0; i <= count; i++) {
tempBuffer = new StringBuffer(buffer);
// 在上次返回的值的前后左右加上新的字符串,比如上次的值是ab 这次的值是c
// 那么就在ab的前面加就是cab,在ab的后面加 就是abc,在ab的中间加就是acb
nextList.add(tempBuffer.insert(i, indexStr));
}
}
list = null;
}
count++;
return sortList(nextList, count, length, arr);
}
return list;
}
结果当字母小于9个时候还可以,但是当字母大于9个的时候就报了内存溢出了
大家是怎么解决的啊!!!!