一个排列组合算法问题

问题:
有三个数组

a1 = ["i1","i2","i3","i4"...."ix"]; x为大于2的整数
a2 = ["k1","k2","k3","k4"...."ky"]; y为大于2的整数
a3 = ["m1","m2","m3","m4"...."mz"]; z为大于2的整数

从每个数组中抽取两个项,每个项只能用一次,组成长度为6的数组,比如:["i1","i2","m1","m2","k1","k2"],找出所有可能的数组。

要求:任意两个数组之间相同的项小于等于2。

比如

l1 = ["i1","i2","m1","m2","k1","k2"];
l2=["i1","i2","m3","m4","k5","k6"];

这两个数组相同项有两个,为"i1"和"i2"。

再比如

l1 = ["i1","i2","m1","m2","k1","k2"];
l2=["i1","i2","m1","m4","k5","k6"];

这两个数组相同项数量为3,为 "i1"、"i2"和"m1"。

阅读 1.8k
1 个回答

以下为Java伪代码

使用三阶循环,剔除不满足条件(a == b && b == c)的数据

for(int a=0; a<= La; a++) {
    for(int b=0; b<=Lb; b++) {
        for(int c=0; c<=Lc; c++) {
            if( a == b && b ==c ){
                continue;
            }else {
                list.add( new Object(Aa, Bb, Cc) );
            }
        }
    }
}

注意:

  1. La, Lb, Lc 表示a,b,c数组的长度
  2. Aa, Bb, Cc表示a,b,c数组中相应下表元素
  3. new Object() 只是一个示意,并不是真正使用Object对象
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题