n个数组实现排列组合

这篇博客探讨了如何通过编程算法来实现手机颜色、内存大小和运营商版本的全排列组合,生成如[[‘白色’,‘16G’,‘移动’], [‘白色’,‘16G’,‘联通’]等所有可能的配置列表。" 108440186,10053627,Fiddler安装与配置指南,"['网络调试', 'HTTP', 'HTTPS抓包', 'Fiddler配置', 'Web开发工具']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命题场景:

现在有一批手机,其中颜色有[‘白色’,‘黑色’,‘金色’];内存大小有[‘16G’,‘32G’,‘64G’],版本有[‘移动’,‘联通’,‘电信’],要求写一个算法,实现[[‘白色’,‘16G’,‘移动’], [‘白色’,‘16G’,‘联通’] …]这样的组合

//数组排列组合方法
          doExchange(arr){
            var len = arr.length;
            // 当数组大于等于2个的时候
            if(len >= 2){
              // 第一个数组的长度
              var len1 = arr[0].length;
              // 第二个数组的长度
              var len2 = arr[1].length;
              // 2个数组产生的组合数
              var lenBoth = len1 * len2;
              //  申明一个新数组,做数据暂存
              var items = new Array(lenBoth);
              // 申明新数组的索引
              var index = 0;
              // 2层嵌套循环,将组合放到新数组中
              for(var i=0; i<len1; i++){
                for(var j=0; j<len2; j++){
                  items[index] = arr[0][i] +"*"+ arr[1][j];
     
实现n个数组排列组合,可以使用递归算法。 首先,我们定义一个函数,输入参数为n个数组和一个空的结果列表。函数的作用是将n个数组进行排列组合,并将所有组合的结果保存在结果列表中。 然后,在函数中,我们使用两个循环嵌套来对数组进行排列组合。外层循环用于遍历数组的第一个元素,内层循环用于遍历其余n-1个数组的所有可能组合。 在内层循环中,我们将当前数组的第一个元素与剩余n-1个数组的所有可能组合拼接成新的组合,并递归调用函数。递归调用的参数为剩余的n-1个数组和拼接后的结果列表。 当递归调用的参数数组为空时,表示已经排列组合完成,将结果列表保存到最终的结果集中。 最后,返回最终的结果集。 下面是一个具体实现的示例代码: ```java import java.util.ArrayList; import java.util.List; public class PermutationCombination { public static void main(String[] args) { int[][] arrays = {{1, 2, 3}, {4, 5}, {6, 7, 8}}; List<List<Integer>> result = new ArrayList<>(); permutationCombination(arrays, new ArrayList<>(), result); System.out.println(result); } private static void permutationCombination(int[][] arrays, List<Integer> current, List<List<Integer>> result) { if (arrays.length == 0) { result.add(new ArrayList<>(current)); return; } for (int i = 0; i < arrays[0].length; i++) { current.add(arrays[0][i]); int[][] remaining = new int[arrays.length - 1][]; for (int j = 1; j < arrays.length; j++) { remaining[j - 1] = arrays[j]; } permutationCombination(remaining, current, result); current.remove(current.size() - 1); } } } ``` 运行上述代码,输出结果为: [[1, 4, 6], [1, 4, 7], [1, 4, 8], [1, 5, 6], [1, 5, 7], [1, 5, 8], [2, 4, 6], [2, 4, 7], [2, 4, 8], [2, 5, 6], [2, 5, 7], [2, 5, 8], [3, 4, 6], [3, 4, 7], [3, 4, 8], [3, 5, 6], [3, 5, 7], [3, 5, 8]] 以上代码实现了将3个数组进行排列组合的功能,你可以根据需要修改输入数组的个数来实现任意个数组排列组合
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值