java 交叉数组_java之数组交叉遍历组合

packagecn.go4mi.util;public classTurns {//测试main方法

public static voidmain(String[] args) {

String [] a={"a","b","c"};

String [] b={"d","e"};

String [] c={"f","j"};

String [] d={"h","i"};

String[] add= newTurns().turns(a, b,c,d);for(String string : add) {

System.out.println(string);

}

}/*** 两两遍历

*@paramarray1

*@paramarray2

*@return

*/

public staticString[] doubleTurns(String [] array1,String[] array2){

String [] target=new String[array1.length*array2.length];for (int i = 0,a1=0,a2=0; i

target[i]=array1[a1]+","+array2[a2];

a2++;if(a2==array2.length){

a2=0;

a1++;

}

}returntarget;

}/*** 遍历组合

*@paramarrays

*@return

*/

public staticString[] turns(String[] ...arrays){if(arrays.length==1){return arrays[0];

}if(arrays.length==0){return null;

}//获得总结果数

int count=0;for (int i = 0; i < arrays.length; i++) {

count*=arrays[i].length;

}

String target[]=newString[count];//两两遍历

for (int i = 0; i < arrays.length; i++) {if(i==0){

target=doubleTurns(arrays[0],arrays[1]);

i++;

}else{

target=doubleTurns(target,arrays[i]);

}

}returntarget;

}

}

var s1 = ["a", "b", "c"];

var s2 = ["d", "e", "f"];

var s3 = ["x", "y", "z"];

var s4 = ["x1", "y2", "z3"];

var temp = [s1, s2 ,s3,s4];

function recursionSub(list, count, array, ind, start, indexs) {

start++;

if (start > count - 1) {

return null;

}

if (start == 0) {

indexs = [100];

}

for (indexs[start] = 0; indexs[start] < array[start].length; indexs[start]++) {

recursionSub(list, count, array, 0, start, indexs);

if (start == count - 1) {

var temp = [];

for (var i = count - 1; i >= 0; i--) {

temp[start - i] = array[start - i][indexs[start - i]];

}

list.push(temp);

}

}

return list;

}

var result = [];

recursionSub(result, temp.length, temp, 0, -1, []);

for (var i = 0; i < result.length; i++) {

console.log(result[i].join(','));

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值