二维数组排列组合

分别用笛卡尔积和递归实现二维数组的排列组合 问题 二维数组的长度和其子数组的长度不定,将各个子数组的元素进行排列组合,将组合的结果作为数组进行输出。 分析 首先简化下问题: 已知二维数组 [[1,2,3],[4,5],[6,9],[1]] 要求各子数组进行排列组合,获得结果为 [ [1, 4, 6, 1] [1, 4, 9, 1] [1, 5, 6, 1] [1, 5, 9, 1] [2, 4, 6, 1] [2, 4, 9, 1] [2, 5, 6, 1] [2, 5, 9, 1] [3, 4, 6, 1] [3, 4, 9, 1 阅读详情

问题:

二维数组分别叫父数组和子数组,父数组的长度和子数组的长度不确定,需要列出所有的组合(每一个组合的长度等于父数组的长度,即每个子数组中取一项进行组合)

分析:

由于父数组的长度和子数组的长度不确定,造成问题难度变大。组合会有很多种,因此把所有组合放在一个数组里好处理。每一个组合里面有多项,也适合使用数组。所有最终结果也用一个二维数组表示。这个问题要分两种情况讨论,一种二维数组父数组长度是1时,组合结果就是本身;第二种情况就是二维数组父数组长度大于1时,这个最难处理,我们可以把这个数组拆分成父数组的第一个子数组和第二个子数组组合,把组合的二维数组和父数组第三项(包含)之后的子数组放到一个新数组中(新数组第一项是前面组合的二维数组,第二项是父数组的第三项,第三项是父数组第四项。。。),新数组重复上面的二种情况,特别之处就是新数组的第一项是二维数组,需要增加判断进行特殊处理。

方案:

上面分析说的有点晦涩,下面看代码理解吧!

function combination(dimensionalArr) {
  const FLength = dimensionalArr.length;
  if (FLength >= 2) {
    const SLength1 = dimensionalArr[0].length;
    const SLength2 = dimensionalArr[1].length;
    const DLength = SLength1 * SLength2;
    const temporary = new Array(DLength);
    let index = 0;
    for (let i = 0; i < SLength1; i++) {
      for (let j = 0; j < SLength2; j++) {
        if (Array.isArray(dimensionalArr[0][i])) {
          temporary[index] = [].concat([...dimensionalArr[0][i], dimensionalArr[1][j]]);
        } else {
          temporary[index] = [].concat([dimensionalArr[0][i], dimensionalArr[1][j]]);
        }
        index++;
      }
    }
    const newArray = new Array(FLength - 1);
    newArray[0] = temporary;
    for (let j = 2; j < FLength; j++) {
      newArray[j - 1] = dimensionalArr[j];
    }
    return combination(newArray);
  } else {
    if (dimensionalArr[0] && dimensionalArr[0][0] && Array.isArray(dimensionalArr[0][0])) {
      return dimensionalArr[0];
    }
    return dimensionalArr;
  }
}
const testArr = [
  ['红', '黄', '蓝'],
  ['8G', '12G'],
  ['pro', 'plus'],
  ['huawei', 'honor']
];
const result = combination(testArr);
console.log('组合种类:' + result.length);
console.log(result);
JS 二维数组的排列组合 // 数组排列组合 var arr = [ ['A', 'B', 'C'], [1, 2, 3], ['X', 'Y', 'Z'], ]; // 输出类似 A1X A1Y A1Z ... 实现 编程,首先要分析规律,有了规律之后再用代码将这种规律实现就好了 分析一下,将计算过程拆解为两两相乘的过程 首先计算[A, B, C] * [1, 2, 3],得到结果[A1, A2, A3, B1, B2, B3] 然后计算[A1, A2, A3, B1, B2, B3] * [.. 阅读详情

相关推荐

前端练习15 求二维数组的排列组合

题目 求出一个二维数组[[A, B], [a, b], [1, 2]]所有排列组合 输入[[A, B], [a, b], [1, 2]] 输出[Aa1, Aa2, Ab1, Ab2, Ba1, Ba2, Bb1, Bb2] 实现 编程,首先要分析规律,有了规律之后要做的就是用代码将这种规律实现就好了!!!!! 分析一下,将计算过程拆解为两两相乘的过程 首先计算[A, B] * [a, b],得到...

多啦的博客 1098

二维数组的排列组合

题目一 给出一个类型二维数组,每个数组中是一个类目(如[["红色", "绿色"], ["大号", "小号"]]),返回所有类型的组合结果([["红色", "大号"], ["红色", "小号"], ["绿色", "大号"], ["绿色", "小号"]]) 题目二 输入 [[A, B], [a, b], [1, 2]] 输出 [Aa1, Aa2, Ab1, Ab2, Ba1, Ba2, Bb1, Bb2] 解题思路 multi 函数 参数:arrA,arrB 返回值:两数组的所有组合 功能:求两个数组之积

weixin_49314618的博客 1460

python-pptx库中文文档及使用样例

个人使用样例及部分翻译自官方文档,并详细介绍chart的使用

4万+

java排列组合二维数组_JavaScript 二维数组排列组合2

二维数组排列组合var arrays = [['1-1-雨尘', '1-2-芸芸', '1-3-简一', '1-4-乐乐'], ['2-5-小明', '2-6-花花', '2-7-数数'], ['3-8-静静', '3-9-点点', '3-10-hapday', '3-11-欢欢', '3-12-yuchen']];var array = getArrayByArrays(arrays);wind...

weixin_31968831的博客 178

【STM32】433MHz OOK信号软解码实战:从EV1527协议到嵌入式实现

本文详细介绍了基于STM32微控制器实现433MHz OOK信号软解码的完整实战过程。文章从EV1527协议解析入手,重点阐述了利用STM32的GPIO和定时器进行信号采样、脉宽还原、同步头识别以及数据位判决的核心算法,并提供了对抗无线干扰的容错优化策略,帮助开发者深入理解并掌握低成本无线通信的嵌入式实现方案。

weixin_29299807的博客 783

Android系统去掉长按webview界面弹框中的分享功能

Android 系统去解决长按显示内容,去掉分享功能,不论那个界面,是所有界面都需要满足。如果仅仅去掉系统自带的,那么系统来处理如果客户自定义,部分App自定义的菜单项,不是调用系统的,那么还是需要应用去解决的。之前做过Editext,其实还需要去TextView,最难点的就是WebView中的HTML了 去分享功能了。WebView中涉及到分享功能菜单的界面,/***//***//***//***//***//***//***//***//**

十年饮冰,难凉热血 1017

js二维数组排列组合

<html> <head> <title>js二维数组排列组合</title> </head> <body> <div id="showDiv"></div> </body> <script type="text/javascript"> var arrays = [ ["a0", "

661

k8s问题处理

执行 kubectl api-resources 报错如下。

weixin_40548182的博客 944

JavaScript二维数组元素排列组合

今天遇到的一个问题:给出任意一个二维数组,要求输出数组元素的所有排列组合。如var myArr = [['A','B','C'],['A1','B1','C1'],['A2','B2']];myArr数组元素的所有排列组合为:"AA1A2""BA1A2""CA1A2""AB1A2""BB1A2""CB1A2""AC1A2""BC1A2""C

lzc的博客 5227

Sigrity System Explorer Transient Analysis模式进行瞬态仿真分析操作指导-单端信号-并联端接

Sigrity System Explorer Transient Analysis模式可以用于瞬态仿真分析,通过搭建简易拓扑用于前仿真分析通道的时域性能,下面搭建一个简易的单端拓扑并且进行并联端接,以下图为例,准备好发送接收端的IBIS模型, (se_example.ibs,本例发送接收端都使用相同的IBIS模型),以及传输线的S参数模型(W1_welement_se.sp)最上方的图形界面是传输线的模型,本例是一个上下都有参考平面的带状线,右侧的梯形是蚀刻角度,根据W1和W2以及铜厚来确定。

weixin_54787054的博客 374

2026必学:LangChain+Playwright爬虫,赋能RAG智能问答系统

RAG(检索增强生成)智能问答系统的效果,80%取决于数据源的质量。2026年,LangChain与Playwright的组合成为企业级RAG数据采集的黄金搭档:LangChain提供标准化的RAG数据处理链路,Playwright解决动态网页渲染的核心痛点,两者结合能高效采集、结构化处理各类网页数据(动态渲染页、复杂交互页、反爬页),为RAG系统提供高质量语料。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1705

Java实现二维数组的排列组合

今天同事在做一个需求的时候,需要设计到二维数组的排列组合为题,就趁这个机会,实现了这个功能,现记录一下; public static void main(String[] args) { List<String[]> list = new ArrayList<>(); list.add(new String[]{"A", "B", "C"}); list.add(new String[]{"D", "E", "F"});

ouYang的博客 1916

“华为杯”研究生数学建模竞赛2020年-【华为杯】E题:能见度估计与预测(附获奖论文及python代码实现)

因此,题目要求借助机场的 AMOS 观测数据中的气压、温度、湿度、风速等气象因子,达到 100% 时,空气中的水汽便会凝结成细微的水滴悬浮于空中,使地面水平的能见度下。传统的仪器探测法成本高,覆盖范围小,而基于视频的能见度检测能弥补仪器测量的不足之处,但是预测精度不高,需要进一步改。象条件,空气质量的影响,其中较为关键的影响因子是雾和霾。性过强,激光能见度仪的检测方法更为可信,但是激光能见度仪覆盖的检测范围小,安装。覆盖的交通视频路况数据间接计算得到能见度数值的方法,此方法成本较低,覆盖范围广。

getusushu的博客 2280

java 二维数组排列组合,JavaScript 二维数组排列组合2

二维数组排列组合var arrays = [[‘1-1-雨尘‘, ‘1-2-芸芸‘, ‘1-3-简一‘, ‘1-4-乐乐‘], [‘2-5-小明‘, ‘2-6-花花‘, ‘2-7-数数‘], [‘3-8-静静‘, ‘3-9-点点‘, ‘3-10-hapday‘, ‘3-11-欢欢‘, ‘3-12-yuchen‘]];var array = getArrayByArrays(arrays);wind...

weixin_42326661的博客 244

RK3588 部署 YOLO26 目标检测:PT → ONNX → RKNN 全流程

YOLO26n 在 RK3588 上 INT8 量化后 NPU 推理约 15ms,系统 FPS 约 55,可以覆盖边缘端实时检测需求。模型从 PT 到 RKNN 的转换要用opset=11避免算子兼容问题。先用 YOLO26n + 640 输入跑通全链路,确认推理结果正确后再做性能调优。

m0_64661770的博客 303

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

js 二维数组 所有排列组合(马井堂)

js 二维数组 所有排列组合,方法如下: var arr = [ ['a', 'b'], ['1', '2', '3'], ['x', 'y'], ] var results = []; var result = []; doExchange(arr, 0); function doExchange(arr, index){ for (var i = 0; i<arr[index].length;

weixin_39501680的博客 1559

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java排列组合二维数组_JS实现二维数组元素的排列组合运算简单示例

本文实例讲述了JS实现二维数组元素的排列组合运算。分享给大家供大家参考,具体如下:用js实现二维数组里面的元素排列组合一个小demo;源码:/p>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">JS数组排列组合运算var arrays = [["a0","a1","a2","a3"],["b0","b1","b2","...

weixin_42405705的博客 147

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java 二维数组排列组合_JS实现二维数组元素的排列组合运算简单示例

本文实例讲述了JS实现二维数组元素的排列组合运算。分享给大家供大家参考,具体如下:用js实现二维数组里面的元素排列组合一个小demo;源码:/p>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">JS数组排列组合运算var arrays = [["a0","a1","a2","a3"],["b0","b1","b2","...

weixin_34553907的博客 188

二维数组递归算法c语言,JavaScript 递归法排列组合二维数组

二维数组排列组合var arrays = [['1-1-雨尘', '1-2-芸芸', '1-3-简一', '1-4-乐乐'], ['2-5-小明', '2-6-花花', '2-7-数数'], ['3-8-静静', '3-9-点点', '3-10-hapday', '3-11-欢欢', '3-12-yuchen']];//debugger;/*** 递归法排列组合二维数组*/function doE...

weixin_39801075的博客 445

python遍历二维数组排列组合_排列组合(遍历)回溯法

这里有一个回溯函数,使用第一个整数的索引作为参数 backtrack(first)。1,如果第一个整数有索引 n,意味着当前排列已完成。2,遍历索引 first 到索引 n-1 的所有整数 ,则:在排列中放置第 i 个整数,即 swap(nums[first], nums[i])继续生成从第 i 个整数开始的所有排列:backtrack(first +1)现在回溯,通过 swap(nums[fi...

weixin_34086545的博客 2082

【JS】用js实现二维数组里面的元素排列组合一个小demo

用js实现二维数组里面的元素排列组合一个小demo; 源码: 无标题文档 var arrays = [["a0","a1","a2","a3"],["b0","b1","b2","b3"],["c0","c1","c2","c3"],["d0","d1","d2","d3"]]; var array = getArrayByArrays(arrays); doc

阿来小同学的博客 3018
上一篇: 样式变量共用于js或者template
下一篇: 年龄计算
xiaojinglyd
博客等级 码龄9年 6粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值