本帖最后由 李金中 于 2014-2-21 21:31 编辑
额 我做过。。。
本人想法:递归肯定的。当n = 1时, 找出所有单个字母组成的字符串,存为cArr[n];当n = m 时,可以将cArr[n]遍历插入当n = m - 1 时的字符串数组的每一个元素后,即得。比如 n = 2时, 可以将 a, b, c分别插入n = 1时的字符串数组元素(且该元素不包括带插入的元素)"a", "b", "c"后,得 "ba" "ca" "ab" "cb" "ac""bc"
同理可得 n = 3时的字符串数组。 程序如下:
public class Test6 {
public static void main(String[] args)
{
ArrayList<StringBuilder> strDes = new ArrayList<StringBuilder>();
String strSource = "abc";
int length = 3;
new Test6().printAll(strSource, length);
}
public ArrayList<StringBuilder> printAll(String strSource, int length)
{
char[] cArr = strSource.toCharArray();
int lengthSource = strSource.length();
ArrayList<StringBuilder> strTemp = new ArrayList<StringBuilder>();
ArrayList<StringBuilder> strDes = new ArrayList<StringBuilder>();
if(length == 1)
{
for(int indexDes = 0; indexDes < lengthSource; indexDes++)
{
strTemp.add(new StringBuilder().append( cArr[indexDes] + ""));
}
}
else
{
length--;
strDes = printAll(strSource, length);
for(int index = 0; index < lengthSource; index++)
{
for(int indexDes = 0; indexDes < strDes.size(); indexDes++)
{
if((strDes.get(indexDes).indexOf(cArr[index] + "")) == -1)
{
StringBuilder strBuilderTemp = new StringBuilder(strDes.get(indexDes));
strBuilderTemp.append(cArr[index] + "");
strTemp.add(strBuilderTemp);
}
}
}
}
for(int indexTemp = 0; indexTemp < strTemp.size(); indexTemp++)
{
System.out.print("\"" + strTemp.get(indexTemp).toString() + "\"");
}
System.out.println();
return strTemp;
}
}
我重装系统了。。之前提交的 加完整注释的代码不见了。。。就剩这个了。。看不懂再跟你解释。。。看懂就算了
|