将组合限制为特定大小

时间:2016-07-21 05:21:44

标签: java combinations

我正在尝试生成存储在Map>

中的元素的键和值组合

例如:{3 = [16],2 = [11,12],1 = [5,7],0 = [1,3]}

需要将组合作为

                [0,1]-> [[1,5],[1,7],[3,5],[3,7]]
                [0,2]-> [[1,11],[1,12],[3,11],[3,12]] and so on..

目前我能够获得这些组合。

但我面临一个问题 1.我只需要获得map.size -1的组合  即目前我的结果是

FINAL RESULT*** [3]===[ 16]
FINAL RESULT*** [2]===[ 11,  12]
FINAL RESULT*** [1]===[ 5,  7]
FINAL RESULT*** [0]===[ 1,  3]
FINAL RESULT*** [3, 2]===[ 16 11,  16 12]
FINAL RESULT*** [3, 1]===[ 16 5,  16 7]
FINAL RESULT*** [3, 0]===[ 16 1,  16 3]
FINAL RESULT*** [2, 1]===[ 11 5,  11 7,  12 5,  12 7]
FINAL RESULT*** [2, 0]===[ 11 1,  11 3,  12 1,  12 3]
FINAL RESULT*** [1, 0]===[ 5 1,  5 3,  7 1,  7 3]
FINAL RESULT*** [3, 2, 1]===[ 16 11 5,  16 11 7,  16 12 5,  16 12 7]
FINAL RESULT*** [3, 2, 0]===[ 16 11 1,  16 11 3,  16 12 1,  16 12 3]
FINAL RESULT*** [3, 1, 0]===[ 16 5 1,  16 5 3,  16 7 1,  16 7 3]
FINAL RESULT*** [2, 1, 0]===[ 11 5 1,  11 5 3,  11 7 1,  11 7 3,  12 5 1,  12 5 3,  12 7 1,  12 7 3]
FINAL RESULT*** [3, 2, 1, 0]===[ 16 11 5 1,  16 11 5 3,  16 11 7 1,  16 11 7 3,  16 12 5 1,  16 12 5 3,  16 12 7 1,  16 12 7 3]

我只需要

FINAL RESULT*** [3, 2, 1]===[ 16 11 5,  16 11 7,  16 12 5,  16 12 7]
FINAL RESULT*** [3, 2, 0]===[ 16 11 1,  16 11 3,  16 12 1,  16 12 3]
FINAL RESULT*** [3, 1, 0]===[ 16 5 1,  16 5 3,  16 7 1,  16 7 3]
FINAL RESULT*** [2, 1, 0]===[ 11 5 1,  11 5 3,  11 7 1,  11 7 3,  12 5 1,  12 5 3,  12 7 1,  12 7 3]

我目前的代码是here

我应该在哪里保持这种状况?

1 个答案:

答案 0 :(得分:0)

在你的

private static void GenCombinations(String[] head, String[] tail, int headIndex, int tailIndex)

方法你可以检查头部阵列的长度,如果它不是三个则返回。

所以添加

   if (head.length != 3) {
       return;
   }

在该方法的顶部,它应该打印你想要的。您可以将3替换为您想要的任何条件,例如地图的大小 - 1或您需要的任何条件。