非递归版本
private static List<List<Double>> circulate (List<List<Double>> dimValue) {
int total = 1;
for (List<Double> list : dimValue) {
total *= list.size();
}
List<List<Double>> myResult = new ArrayList<List<Double>>();
int itemLoopNum = 1;
int loopPerItem = 1;
int now = 1;
for (List<Double> list : dimValue) {
now *= list.size();
int index = 0;
int currentSize = list.size();
itemLoopNum = total / now;
loopPerItem = total / (itemLoopNum * currentSize);
int myIndex = 0;
for (Double string : list) {
for (int i = 0; i < loopPerItem; i++) {
if (myIndex == list.size()) {
myIndex = 0;
}
for (int j = 0; j < itemLoopNum; j++) {
if(index>myResult.size()-1){
List<Double> tmp = new ArrayList<Double>();
tmp.add(list.get(myIndex));
myResult.add(tmp);
}else{
myResult.get(index).add(list.get(myIndex));
}
index++;
}
myIndex++;
}
}
}
return myResult;
}
递归版本
private static void recursive (List<List<Double>> dimValue, List<List<Double>> result, int layer, List<Double> curList) {
if (layer < dimValue.size() - 1) {
if (dimValue.get(layer).size() == 0) {
recursive(dimValue, result, layer + 1, curList);
} else {
for (int i = 0; i < dimValue.get(layer).size(); i++) {
List<Double> list = new ArrayList<Double>(curList);
list.add(dimValue.get(layer).get(i));
recursive(dimValue, result, layer + 1, list);
}
}
} else if (layer == dimValue.size() - 1) {
if (dimValue.get(layer).size() == 0) {
result.add(curList);
} else {
for (int i = 0; i < dimValue.get(layer).size(); i++) {
List<Double> list = new ArrayList<Double>(curList);
list.add(dimValue.get(layer).get(i));
result.add(list);
}
}
}
}