Java 如何连接二维数组中的列?
如何连接二维数组中的列Java 如何连接二维数组中的列?,java,arrays,algorithm,combinations,Java,Arrays,Algorithm,Combinations,如何连接二维数组中的列 a b c d 1 3 9 6 4 2 7 1 自动检查列数 例如: 如果有四列,则应考虑三个组合。 输出应为: 首先采取两种组合: ab ac ad bc bd cd 13 19 16 39 36 96 42 47 41 27 21 71 abc abd bcd acd 139 136 396 196 427 421 271 471 然后采取三种组合: ab ac ad bc bd cd 13 19 16 39 36 96 42 47 41 27 21 71 a
a b c d
1 3 9 6
4 2 7 1
自动检查列数
例如:
如果有四列,则应考虑三个组合。
输出应为: 首先采取两种组合:ab ac ad bc bd cd
13 19 16 39 36 96
42 47 41 27 21 71
abc abd bcd acd
139 136 396 196
427 421 271 471
然后采取三种组合:
ab ac ad bc bd cd
13 19 16 39 36 96
42 47 41 27 21 71
abc abd bcd acd
139 136 396 196
427 421 271 471
我应该如何编写代码
下面是我试图获得这两种组合的代码。我需要如何更改它以获得上述输出
for (int i = 0; i < row.size(); i++) {
for (int j = 0; j < col.size(); j++) {
for (int k = j + 1; k < col.size(); k++) {
array1.add(col[j]);
array2.add(col[k]);
array.add(array1.get(j) + array2.get(k));
}
}
System.out.println("array");
}
for(int i=0;i
我发现这个问题很有趣,所以我花了一些时间来解决它。:)
以下是几点观察:
- 对每行执行相同的组合,因此问题可以简化为组合一行的列,然后对每行应用相同的方法
- 看起来您并不是在寻找所有排列,而是在寻找列与数组中后面的列组合在一起的子集。也就是说,您不想同时使用
和ab
,只需要ba
ab
- 结果应包括2..n-1列的组合(其中n为列数)。也就是说,您似乎不希望只需要1列(原始列)或n列(所有列的组合)
级别
调用了这个函数。也许不是最好的名字,但对我来说很有意义
b) 查找当前级别的所有组合
,并将其添加到结果中RowCombine
测试
运行
new ArrayCombine(new String[][]{
{ "a", "b", "c", "d"},
{ "1", "3", "9", "6"},
{ "4", "2", "7", "1"},
}).print();
产生
ab ac ad bc bd cd abc abd acd bcd
13 19 16 39 36 96 139 136 196 396
42 47 41 27 21 71 427 421 471 271
ab ac ad ae bc bd be cd ce de abc abd abe acd ace ade bcd bce bde cde abcd abce abde acde bcde
13 19 16 15 39 36 35 96 95 65 139 136 135 196 195 165 396 395 365 965 1396 1395 1365 1965 3965
42 47 41 41 27 21 21 71 71 11 427 421 421 471 471 411 271 271 211 711 4271 4271 4211 4711 2711
它也适用于更高的尺寸,例如:
new ArrayCombine(new String[][]{
{ "a", "b", "c", "d", "e"},
{ "1", "3", "9", "6", "5"},
{ "4", "2", "7", "1", "1"},
}).print();
产生
ab ac ad bc bd cd abc abd acd bcd
13 19 16 39 36 96 139 136 196 396
42 47 41 27 21 71 427 421 471 271
ab ac ad ae bc bd be cd ce de abc abd abe acd ace ade bcd bce bde cde abcd abce abde acde bcde
13 19 16 15 39 36 35 96 95 65 139 136 135 196 195 165 396 395 365 965 1396 1395 1365 1965 3965
42 47 41 41 27 21 21 71 71 11 427 421 421 471 471 411 271 271 211 711 4271 4271 4211 4711 2711
如果有6列,您是否还需要其中4列和5列的所有组合,或者只需要其中2列和3列的组合?您的代码输出什么?您希望它输出什么?它对2个组合正确工作吗?您想将其扩展到3个(或更多),还是希望我们帮助您修复2个组合?我不理解构建组合的规则。或者你只是错过了其中的一些?组合的规则是他从4个中选择2到3个,顺序不重要,不允许重复。组合数为:n/(右)!(r!)@keshlam,而不是在标题中编辑关键字(特别是将它们放在括号中的末尾,我个人认为这是不合适的),你应该使用标签(虽然我个人不建议使用标签,因为我觉得这样做没有多大价值),或者将其编辑到问题正文的某个地方。