public class SkuUtil {
/**
* Created on 2014年4月27日
* <p>Discription:笛卡尔乘积算法
* 把一个List{[1,2],[3,4],[a,b]}转化成List{[1,3,a],[1,3,b],[1,4,a],[1,4,b],[2,3,a],[2,3,b],[2,4,a],[2,4,b]}数组输出
* </p>
* @param dimvalue原List
* @param result通过乘积转化后的数组
* @param layer 中间参数
* @param curList 中间参数
*/
private static void descartes(List< List< String> > dimvalue, List< List< String> > result, int layer, List< String> curList) {
if (layer < dimvalue.size() - 1 ) {
if (dimvalue.get(layer).size() == 0 ) {
SkuUtil.descartes(dimvalue, result, layer + 1 , curList);
} else {
for (int i = 0 ; i < dimvalue.get(layer).size(); i+ + ) {
List< String> list = new ArrayList< String> (curList);
list.add(dimvalue.get(layer).get(i));
SkuUtil.descartes(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< String> list = new ArrayList< String> (curList);
list.add(dimvalue.get(layer).get(i));
result.add(list);
}
}
}
}
}
文章转载自:PHP爱好者 [ http://www.joyphper.net/ ] 本文标题:JAVA笛卡尔(descartes)乘积运算结果的输出 本文地址: http://www.joyphper.net/article/201405/276.html