二维数组的排列组合

题目一

给出一个类型二维数组,每个数组中是一个类目(如[["红色", "绿色"], ["大号", "小号"]]),返回所有类型的组合结果([["红色", "大号"], ["红色", "小号"], ["绿色", "大号"], ["绿色", "小号"]])

题目二
  • 输入 [[A, B], [a, b], [1, 2]]
  • 输出 [Aa1, Aa2, Ab1, Ab2, Ba1, Ba2, Bb1, Bb2]
解题思路
  • multi 函数
    参数:arrA,arrB
    返回值:两数组的所有组合
    功能:求两个数组之积 --> 所有组合
    [A,B] * [a,b] ==> [Aa,Ab,Ba,Bb]
  • allGroups 函数
    方法一:递归。不断地传入数组,和之前的结果整合
    [Aa,Ab,Ba,Bb]*[1,2]==>[Aa1, Aa2, Ab1, Ab2, Ba1, Ba2, Bb1, Bb2]
    方法二:数组的 reduce 方法
function multi(arr1,arr2){
  if(arr1.length==0){ // arr1 是空数组 []
    return arr2;
  }
  if(arr2.length==0){
    return arr1;
  }
  let res = [];
  for(let i=0;i<arr1.length;i++){
    for(let j=0;j<arr2.length;j++){
      res.push(String(arr1[i])+String(arr2[j]))
    }
  }
  return res;
}
let arr1 = ["A","B"],arr2 = ["a","b"];
console.log(multi(arr1,arr2));//['Aa', 'Ab', 'Ba', 'Bb']
// reduce 拼接
function allGroups(arr){
  return arr.reduce((total,cur)=>{
    let ress = multi(total,cur);
    console.log(ress);
    return ress;
  },[]);
}
let arr=[["A","B"],["a","b"],[1,2]];
allGroups(arr);// ['Aa1', 'Aa2', 'Ab1', 'Ab2', 'Ba1', 'Ba2', 'Bb1', 'Bb2']
  • allGroups 如果用方法一:
function allGroups(arr){
  let ress = [];
  while(arr.length!==0){// 递归出口
    let curArr = arr.shift();
    ress = multi(ress,curArr);
  }
  return ress;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值