将两个数组 排列组合到一个数组集合 求java 代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将两个数组 排列组合到一个数组集合 求java 代码相关的知识,希望对你有一定的参考价值。

输入 数组1a,b,c 数组2x,y,z输出List数组 a,b,c 去掉 C3/3 C0/3 排列组合 a b c a,b a,c b,cx,y,z 去掉 C3/3 C0/3 排列组合 x y z x,y x,z y,z现在要求当 数组1a,b,c 取a 的时候 从数组二中取y,z 组合成 a,y,z 现在要求当 数组1a,b,c 取b 的时候 从数组二中取x,z 组合成 x,b,z 现在要求当 数组1a,b,c 取c 的时候 从数组二中取x,z 组合成 x,y,c 依次类推现在要求当 数组1a,b,c 取a,b 的时候 从数组二中取z 组合成 a,b,z.....输出的List List数组就是组合的数组.( 从数组1从取数据填充到新的数组对应的位子,其他位置由对应的数组2中取.)

参考技术A import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Test

private String[] arr1;
private String[] arr2;

public Test()
//数组长度可以随意改,但必须保证两个数组长度一样
arr1 = new String[3];
arr2 = new String[3];
initArray();


private void initArray()
Scanner scanner = new Scanner(System.in);
for(int i=0;i<arr1.length;i++)
arr1[i] = scanner.next();

for(int i=0;i<arr2.length;i++)
arr2[i] = scanner.next();


/**
* 获取组合后的数组表单
* @return
*/
private List<String[]> getcombineList()
List<String[]> list = new ArrayList<String[]>();
combineArray(list, arr1, arr2);
combineArray(list, arr2, arr1);
return list;

/**
* 遍历数组str1,并将其复制到新的数组,再将str2中索引值与str1中索引值
* 相同的元素放入新的数组,然后将新的数组放入list中
* @param list
* @param str1
* @param str2
*/
private void combineArray(List<String[]> list,String[] str1, String[] str2)
for(int i=0; i<str1.length; i++)
String[] str = new String[str1.length];
for(int j=0; j<str2.length; j++)
str[j] = str2[j];
if(i == j)
str[j] = str1[j];

System.out.println(getArrayMessage(str));
list.add(str);



/**
* 将数组每一个元素组合成字符串
* @param str 字符串数组
* @return 组合字符串
*/
private String getArrayMessage(String[] str)
StringBuffer buffer = new StringBuffer();
for(int i=0; i<str.length; i++)
if(i == str.length-1)
buffer.append(str[i]);
else
buffer.append(str[i]).append(",");

return buffer.toString();


public static void main(String[] argv)
Test test = new Test();
test.getcombineList();

本回答被提问者和网友采纳
参考技术B 先问一下,list应该录入值应该录入一个吧,最后取a的时候,用什么方法取,有什么条件,你这有点笼统了.取得时候是按照下标取,还是按照里面的元素判断,如果这个弄清楚这个就出来了,而且最后录入的时候list怎么可以接收两个又可以接收三个呢?除非用的是数字,把所有元素相加,录入list,这个分析出来就这样,不难,就是有点绕,如果你不会的话,把前面的条件和元素类型告诉我,我给你弄出来 参考技术C 请问楼主,这两个数组固定的还是用户输入的数组?追问

由用户输入的

追答

还是不明白楼主的意思,输出list组合,
=======================================
在要求当 数组1a,b,c 取a 的时候 从数组二中取y,z 组合成 a,y,z
现在要求当 数组1a,b,c 取b 的时候 从数组二中取x,z 组合成 x,b,z
现在要求当 数组1a,b,c 取c 的时候 从数组二中取x,z 组合成 x,y,c

依次类推
现在要求当 数组1a,b,c 取a,b 的时候 从数组二中取z 组合成 a,b,z
.....
=====================================
是将所有的情况输出来:
{a,b,c,d} 1,2,3,4
:a,2,31,b,31,2,ca1,2,3,d
a,b,3a,2,c1,b,c....
a,b,c,1....

等等所有的情况输出来,还是:根据用户的要求取两个,三个,加入另个数组啊,等下写写。。。。

算法:求多个数组的排列组合

问题:

给到如下数组:

$fields[0] = ["ddd"];
$fields[1] = ["eee","ffff","ccc"];

$fields[2] = ["gggg","hhh"];
$fields[3] = ["aaa","bbb"];

求他们的所有排列组合结果,比如:

ddd  eee  gggg  aaa

ddd  eee  gggg  bbb

ddd  ffff  gggg  aaa

ddd  ffff  hhh  bbb

.......

解题思路:

分治法的思想非常适合此类问题求解,

分--将问题分解为规模更小的子问题;
治--将这些规模更小的子问题逐个击破;
合--将已解决的子问题合并,最终得出“母”问题的解;

我们先通过分治法将问题分解为若干子问题,比如题目中的数组有四个子数组,我们可以讲两个组合(0和1组合,2和3组合),分别求出他们的排列组合结果,再将他们的排列组合结果,用同样方法递归求排列组合结果(此过程是分治法的合并子集的过程),最终将得到母问题的解。

代码如下,PHP版本

<?php

$fields[0] = ["ddd"];
$fields[1] 

以上是关于将两个数组 排列组合到一个数组集合 求java 代码的主要内容,如果未能解决你的问题,请参考以下文章

求C语言二维数组元素排列组合?

算法:求多个数组的排列组合

字符串数组全排列——逐个追加组合算法

将数组3,7,1,6,2,4,8,5中的元素从大到小的顺序排列,每次可以任意交换两个元素,求最少的交换次数。

java 比较两个list数组问题

如何求两个数组的交集??