迪卡尔积

 
非递归版本
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);  }  }  }  }  



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部