【发布时间】:2012-02-12 14:35:19
【问题描述】:
我正在编写一个程序来列出字母 A、B、C 和 D 的所有可能组合。我已经成功编写了一个程序来列出所有可能的排列。
但是,我将如何重写程序以工作并产生所有组合(即:ABCD = DCBA 和 AB = BA,所以只要有一个,就不需要列出另一个)。
到目前为止,我当前程序的代码是:
import java.util.ArrayList;
public class Perms {
public static void main(String[] args) {
ArrayList<Character> characters = new ArrayList<Character>();
characters.add('A');
characters.add('B');
characters.add('C');
characters.add('D');
int count = 0;
for (int i = 0; i < characters.size(); i++) {
for (int j = 0; j < characters.size(); j++) {
for (int k = 0; k < characters.size(); k++) {
for (int d = 0; d < characters.size(); d++) {
count++;
System.out.println(count + ": " + characters.get(i) + characters.get(j) + characters.get(k) + characters.get(d));
}
}
}
}
}
}
【问题讨论】:
-
对不起,您能否更清楚地说明您的问题。因为,在集合 {A,B,C,D} 中只有一个包含四个元素的字符串,顺序无关紧要:是 ABCD 还是 BCDA 还是 CDAB.... 所以,只有一个字符串,您可以从中选择一个.我认为您的问题是:列出所有集合都是由 {A,B,C,D} 制成的。如果这是真的,那么一些答案是:{a} {B} {C} {D} {AB} {AC}......对吗?
-
对不起;我的意思是打印 ABCD、ABC、AB 等。只是每组独特的字母。
-
给定的代码不会生成所有可能的 ABCD 排列,而是生成所有长度为 4 的字母 ABCD 字符串。 AAAA,您的程序将打印的第一行,不是 ABCD 的排列。
-
m92,通过排列,顺序很重要。它位于the definition of a permutation。您正在寻找一个组合。
标签: java for-loop arraylist combinations