package test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestZuhe {
/**
* 递归算法:将数据分为两部分,递归将数据从左侧移右侧实现全排列
*
* @param datas
* @param target
*/
private static void sort(List datas, List target,Map<String,Integer> indexMap,List<List> allCombinationList,int NUM) {
//判断如果扔过来的已经够数了,就输出
if (target.size() == NUM) {
allCombinationList.add(target);
return;
}
//以某个作为第一个从原框子中扔,目的是实现全排列
for (int i = 0; i < datas.size(); i++) {
List newDatas = new ArrayList(datas);
List newTarget = new ArrayList(target);
//如果新框子中已经有数据,并且要扔的数据索引>前一个数据,则continue
if(newTarget != null && newTarget.size()>0){
//如果将要扔的数据比已经扔过的顺序靠前,则跳过当前的,尝试扔下一个
if(indexMap.get(newDatas.get(i)) < indexMap.get(newTarget.get(newTarget.size()-1))){
//继续以下一个作为最开始扔的
continue;
}
}
//新框子中添加当前扔的
newTarget.add(newDatas.get(i));
//原框子中移除
newDatas.remove(i);
sort(newDatas, newTarget, indexMap,allCombinationList,NUM);
}
}
public static List getAllCombinationList(String[] datas){
List<List> allCombinationList = new ArrayList();
Map<String,Integer> indexMap = new HashMap();
for(int i=0; i< datas.length;i++){
indexMap.put(datas[i], i);
}
for(int i=1; i<=datas.length; i++ ){
sort(Arrays.asList(datas), new ArrayList(),indexMap,allCombinationList,i);
}
return allCombinationList;
}
public static void main(String[] args) {
String[] datas = new String[] { "e","d", "c", "b", "a" };
List<List> allCombinationList = getAllCombinationList(datas);
for(int i=0; i<allCombinationList.size(); i++ ){
List combination = allCombinationList.get(i);
for (Object obj : combination){
System.out.print(obj);
}
System.out.println();
}
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestZuhe {
/**
* 递归算法:将数据分为两部分,递归将数据从左侧移右侧实现全排列
*
* @param datas
* @param target
*/
private static void sort(List datas, List target,Map<String,Integer> indexMap,List<List> allCombinationList,int NUM) {
//判断如果扔过来的已经够数了,就输出
if (target.size() == NUM) {
allCombinationList.add(target);
return;
}
//以某个作为第一个从原框子中扔,目的是实现全排列
for (int i = 0; i < datas.size(); i++) {
List newDatas = new ArrayList(datas);
List newTarget = new ArrayList(target);
//如果新框子中已经有数据,并且要扔的数据索引>前一个数据,则continue
if(newTarget != null && newTarget.size()>0){
//如果将要扔的数据比已经扔过的顺序靠前,则跳过当前的,尝试扔下一个
if(indexMap.get(newDatas.get(i)) < indexMap.get(newTarget.get(newTarget.size()-1))){
//继续以下一个作为最开始扔的
continue;
}
}
//新框子中添加当前扔的
newTarget.add(newDatas.get(i));
//原框子中移除
newDatas.remove(i);
sort(newDatas, newTarget, indexMap,allCombinationList,NUM);
}
}
public static List getAllCombinationList(String[] datas){
List<List> allCombinationList = new ArrayList();
Map<String,Integer> indexMap = new HashMap();
for(int i=0; i< datas.length;i++){
indexMap.put(datas[i], i);
}
for(int i=1; i<=datas.length; i++ ){
sort(Arrays.asList(datas), new ArrayList(),indexMap,allCombinationList,i);
}
return allCombinationList;
}
public static void main(String[] args) {
String[] datas = new String[] { "e","d", "c", "b", "a" };
List<List> allCombinationList = getAllCombinationList(datas);
for(int i=0; i<allCombinationList.size(); i++ ){
List combination = allCombinationList.get(i);
for (Object obj : combination){
System.out.print(obj);
}
System.out.println();
}
}
}