全排列问题
其中一个思路:如“12345”,将1插入2、3、4、5的所有组合串的可能位置(“2345”的全排列),“2345”的全排列则是2插入3、4、5的所有组合成可能位置,如此递归。
public static void main(String[] args) {
// TODO Auto-generated method stub
List<string> list = quanpai("12345");
for (String string : list) {
System.out.println(string);
}
System.out.println(list.size());
}
//全排列主函数
private static List<string> quanpai(String str) {
List<string> list = new ArrayList<string>();
if(str.length() <= 1)
{
list.add(str);
}
else
{
char a = str.charAt(0);
String subStr = str.substring(1);
//得到子串的全排列
List<string> subList = quanpai(subStr);
//将第一个字符分别插入子串的全排列的每个位置
for (String string : subList) {
for (int i = 0; i <= string.length(); i++) {
String str1 = insertCharToStringAtIndex(a, string, i);
list.add(str1);
}
}
}
return list;
}
//将字符插入字符串指定位置
private static String insertCharToStringAtIndex(char ch, String str, int index)
{
String sub1 = str.substring(0, index);
String sub2 = str.substring(index);
return sub1 + ch + sub2;
}
另附一种方案:http://my.csdn.net/t_eel/code/detail/56218
参考:http://www.cnblogs.com/1-2-3/archive/2011/05/23/generate-permutation-part3.html
|
作者:心亦
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
|

浙公网安备 33010602011771号