多个数组笛卡尔积java_多数组求笛卡尔积

这是一个关于如何使用Java来计算多个数组的笛卡尔积的示例。提供的代码定义了一个名为Descartes的函数,它接受多个数组作为参数,并通过递归方式计算它们的所有可能组合。函数首先检查参数是否只有一个数组,如果是,则直接调用自身。接着,它将第一个数组从参数中移除并进行切片处理,然后遍历剩余的数组进行笛卡尔积计算。最后,返回计算得到的组合结果。
摘要由CSDN通过智能技术生成

functionDescartes() {$t = func_get_args();if(func_num_args() == 1){return call_user_func_array( __FUNCTION__, $t[0] );

}$a = array_shift($t);if(! is_array($a)){$a = array($a);

}$a = array_chunk($a, 1);do{$r = array();$b = array_shift($t);if(! is_array($b)){$b = array($b);

}foreach($a as $p){foreach(array_chunk($b, 1) as $q){$r[] = array_merge($p, $q);

}

}$a = $r;

}while($t);return $r;

}//示例

$arr = array(array('a1','a2','a3'),

'b',

array('c1','c2'),

array('d1','d2','d3'),

//......省略其它元素(也可以是数组),

);$r = Descartes( $arr);var_dump($r);exit;/*array(18) {

[0]=>

array(4) {

[0]=>

string(2) "a1"

[1]=>

string(1) "b"

[2]=>

string(2) "c1"

[3]=>

string(2) "d1"

}

[1]=>

array(4) {

[0]=>

string(2) "a1"

[1]=>

string(1) "b"

[2]=>

string(2) "c1"

[3]=>

string(2) "d2"

}

[2]=>

array(4) {

[0]=>

string(2) "a1"

[1]=>

string(1) "b"

[2]=>

string(2) "c1"

[3]=>

string(2) "d3"

}

[3]=>

array(4) {

[0]=>

string(2) "a1"

[1]=>

string(1) "b"

[2]=>

string(2) "c2"

[3]=>

string(2) "d1"

}

[4]=>

array(4) {

[0]=>

string(2) "a1"

[1]=>

string(1) "b"

[2]=>

string(2) "c2"

[3]=>

string(2) "d2"

}

[5]=>

array(4) {

[0]=>

string(2) "a1"

[1]=>

string(1) "b"

[2]=>

string(2) "c2"

[3]=>

string(2) "d3"

}

[6]=>

array(4) {

[0]=>

string(2) "a2"

[1]=>

string(1) "b"

[2]=>

string(2) "c1"

[3]=>

string(2) "d1"

}

[7]=>

array(4) {

[0]=>

string(2) "a2"

[1]=>

string(1) "b"

[2]=>

string(2) "c1"

[3]=>

string(2) "d2"

}

[8]=>

array(4) {

[0]=>

string(2) "a2"

[1]=>

string(1) "b"

[2]=>

string(2) "c1"

[3]=>

string(2) "d3"

}

[9]=>

array(4) {

[0]=>

string(2) "a2"

[1]=>

string(1) "b"

[2]=>

string(2) "c2"

[3]=>

string(2) "d1"

}

[10]=>

array(4) {

[0]=>

string(2) "a2"

[1]=>

string(1) "b"

[2]=>

string(2) "c2"

[3]=>

string(2) "d2"

}

[11]=>

array(4) {

[0]=>

string(2) "a2"

[1]=>

string(1) "b"

[2]=>

string(2) "c2"

[3]=>

string(2) "d3"

}

[12]=>

array(4) {

[0]=>

string(2) "a3"

[1]=>

string(1) "b"

[2]=>

string(2) "c1"

[3]=>

string(2) "d1"

}

[13]=>

array(4) {

[0]=>

string(2) "a3"

[1]=>

string(1) "b"

[2]=>

string(2) "c1"

[3]=>

string(2) "d2"

}

[14]=>

array(4) {

[0]=>

string(2) "a3"

[1]=>

string(1) "b"

[2]=>

string(2) "c1"

[3]=>

string(2) "d3"

}

[15]=>

array(4) {

[0]=>

string(2) "a3"

[1]=>

string(1) "b"

[2]=>

string(2) "c2"

[3]=>

string(2) "d1"

}

[16]=>

array(4) {

[0]=>

string(2) "a3"

[1]=>

string(1) "b"

[2]=>

string(2) "c2"

[3]=>

string(2) "d2"

}

[17]=>

array(4) {

[0]=>

string(2) "a3"

[1]=>

string(1) "b"

[2]=>

string(2) "c2"

[3]=>

string(2) "d3"

}

}*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值