用java找出这几个list,所有可能的组合,并且组合结果的list中的数据不允许重复

publicstaticvoidmain(Stringargs[]){List<Integer>a=newArrayList<>();a.add(1);a.add(2);... public static void main (String args[]) { List<Integer> a = new ArrayList<>(); a.add(1); a.add(2); a.add(3); List<Integer> b = new ArrayList<>(); b.add(2); b.add(3); b.add(4); b.add(5); List<Integer> c = new ArrayList<>(); c.add(5); c.add(6); List<Integer> d = new ArrayList<>(); d.add(5); List<Integer> e = new ArrayList<>(); e.add(7); /** 用java找出这几个list,所有可能的组合,并且组合的list中数据不允许重复 组合结果例: a c e a d e b e */ } 展开
 我来答
匿名用户
2019-09-28
展开全部

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Iterator;

import java.util.List;

import java.util.TreeSet;

public class MyCode {

static TreeSet<String> ts = new TreeSet<>();

static StringBuffer stb = new StringBuffer();


public static void main(String args[]) {

List<Integer> a = new ArrayList<>();

a.add(1);

a.add(2);

a.add(3);

List<Integer> b = new ArrayList<>();

b.add(2);

b.add(3);

b.add(4);

b.add(5);

List<Integer> c = new ArrayList<>();

c.add(5);

c.add(6);

List<Integer> d = new ArrayList<>();

d.add(5);

List<Integer> e = new ArrayList<>();

e.add(7);

String arr[];

List<String> names = (Arrays.asList("a,b,c,d,e".split(",")));

ArrayList<List<Integer>> list = new ArrayList<>();

list.add(a);

list.add(b);

list.add(c);

list.add(d);

list.add(e);

for (int i = 0; i < list.size(); i++) {

List<Integer> temA = new ArrayList<>(list.get(i));

for (int j = i + 1; j < list.size(); j++) {

List<Integer> temB = new ArrayList<>(list.get(j));

temA.retainAll(temB);

if (temA.size() <= 0) {

List<Integer> temC = new ArrayList<>(list.get(i));

List<Integer> temD = new ArrayList<>(list.get(j));

temC.addAll(temD);

stb.append(names.get(i) + "," + names.get(j) + ",");

getNameIndex(temC, list, i, j, names);

arr = stb.toString().split(",");

Arrays.sort(arr);

ts.add(Arrays.toString(arr));

stb.delete(0, stb.length());

}

}

}

for (Iterator<String> it = ts.iterator(); it.hasNext();) {

System.out.println(it.next());

}

}

private static void getNameIndex(List<Integer> listTem, List<List<Integer>> listB, int x, int y,

List<String> names) {

for (int i = 0; i < listB.size(); i++) {

if (i == x || i == y) {

continue;

}

List<Integer> listN = new ArrayList<>(listTem);

List<Integer> listM = new ArrayList<>(listB.get(i));

listN.retainAll(listM);

if (listN.size() <= 0) {

stb.append(names.get(i));

break;

}

}

}

}

你这个,麻雀虽小,五脏俱全呢,看似一个简单的小玩意,挺费劲的!

主要用的是交集,并集,难点就是因为嵌套,有点饶头..你自己琢磨一下吧!

it的砖头
2019-09-27 · TA获得超过1039个赞
知道小有建树答主
回答量:428
采纳率:70%
帮助的人:89.6万
展开全部
使用递归方法实现
/**
* 排列组合
* eg:a b c的排列有abc,acb,bac,bca,cab,cba
* 方法:递归,第一层循环把n个数中的第i个装入结果的第一个位置
* 接着将剩下的n-1个数循环装入第二个位置
* 把剩下的n-2个数循环装入第三个位置...
*
* @param args
*/
public static void main(String[] args) {
//初始数据
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("d");
//追加待组合的数据
StringBuffer data = new StringBuffer();
//保存排列好的数据
ArrayList<String> results = new ArrayList<String>();
rank(arrayList, data, results);
//按合适的格式输出排列结果
int k = 0;
for (String s : results) {
k++;
System.out.print(s + "、");
if (k == results.size() / arrayList.size()) {
k = 0;
System.out.println();
}
}

}

//主要算法
public static void rank(ArrayList<String > arrayList, StringBuffer data, ArrayList<String> results) {
if (arrayList.size() == 0) {
results.add(data.toString());
}
for (int i = 0; i < arrayList.size(); i++) {
data.append(arrayList.get(i));
//必须创建新的list,否则原来的list会被改变
ArrayList<String> newArrayList = new ArrayList<String>(arrayList);
newArrayList.remove(i);
rank(newArrayList, data, results);
}
//把记录的data最后一个去掉,否则前面的结果会影响循环过程。
if (data.length() != 0) {
data.deleteCharAt(data.length() - 1);
}
}
追问
兄弟,这不对,和我的问题不相符,我是要找到多个list的组合,并且组合好的多个list中不存在重复数据,比如我写的图中的那种数据,得到的结果应该是 [list a/list c/list e] ,[list a/list b/list e], [list b/list e]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式