递归算法:
/**
* 求排列(递归)
* @param result 最终排列结果
* @param out 已经排列内容
* @param target 需要排列的数据集合
* @param m 排列元素个数
*
* 待解决:1 大数据 溢出 () 2 使用多线程提速排列过程
*
* */
public static void f(List<String> result, String out, List<String> target, int m) {
if(m == 0) {
result.add(out);
System.out.println(out);
} else {
for (int i=0; i<target.size(); i++) {
List<String> tem = getSubList(target,i);
f(result, out + target.get(i), tem, m-1);
}
}
}
/**
* 求排除第i个元素的子集
* @param target
* @param i
* @return
*/
private static List<String> getSubList(List<String> target, int i) {
List<String> temp = new ArrayList<String>();
temp.addAll(target);
temp.remove(i);
return temp;
}
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
String[] arr = "1 2 3 4 5 6 7 8 9 0 A B C D E F G".split(" ");
Collections.addAll(list, arr);
List<String> result = new ArrayList<String>();
int len = arr.length;
int m = 17;
long timer = System.currentTimeMillis();
f(result, "", list, m);
timer = System.currentTimeMillis() - timer;
System.out.println("A("+m+","+len+") size="+result.size()+" timer="+timer);
}