【发布时间】:2014-04-06 10:29:46
【问题描述】:
我有 5x5 元素表。假设该表中的每一行都是一个罐子。行中的每个元素都是罐子中不同颜色的球。 我们从第一个罐子里拿一个球,从第二个罐子里拿一个球,从第三个罐子里拿一个球……以此类推到第五罐子。 我们有 5 种球的颜色组合……然后我们把球放回相关的罐子里。 问题:有多少种组合变体是可能的? 回答 n ^ n ,其中 n 是表格大小!
问题是,我永远不知道表有多大,尽管总是对称 (n x n) 元素。我想编写 UNIVERSAL 方法,它将返回所有可能的颜色组合。
对于表格 5x5 元素,它看起来像这样:
private int combinations = 0;
private char table[][] = { {'A','B','C','D','E'},
{'F','G','H','I','J'},
{'K','L','M','N','O'},
{'P','Q','R','S','T'},
{'U','V','X','Y','Z'}};
public Prog() {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
for (int k= 0; k < 5; k++) {
for (int l = 0; l < 5; l++) {
for (int m = 0; m < 5; m++) {
System.out.println(table[0][i] +" " + table[1][j]+ " " + table[2][k]+ " " + table[3][l]+ " " + table[4][m]);
combinations++;
}
System.out.println("--------------");
}
}
}
}
System.out.println("Total combination is : " + combinations);
}
... 但以上代码仅适用于 5x5 表格。如果我得到 4x4 或 3x3,我需要修改所有 for 循环才能正常工作...... 有人可以帮我写一个可以根据表格大小修改自身并返回正确组合的方法吗?
谢谢!!
【问题讨论】:
-
如果目标是确定组合的数量,那么只需应用幂:a^a。如果您想要组合本身,则需要递归。
-
使用
.length开始 -
递归应该以更易读的方式解决这个问题
-
@weston 我坚信你想创建一个迭代实现...... :)
-
@TheConstructor 我的午餐已经准备好了,所以我放弃了,但我现在有了!