迪卡尔积
非递归版本
private static List> circulate (List> dimValue) { int total = 1; for (List list : dimValue) { total *= list.size(); } List> myResult = new ArrayList>();int itemLoopNum = 1; int loopPerItem = 1; int now = 1; for (List 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 tmp = new ArrayList();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> dimValue, List> result, int layer, List 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 list = new ArrayList(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 list = new ArrayList(curList); list.add(dimValue.get(layer).get(i)); result.add(list); } } } }
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
