如果我有一个字符串,请说“ABCDE”,获得两个组合的最佳方法是什么?有这样一个任务的API吗?如何获得Java中的不同组合
即
- “AB”
- “AC”
- “AD”
- “AE”
- “BC”
- “BD”
- “BE”
- “CD”
- “CE”
- “DE”
如果我有一个字符串,请说“ABCDE”,获得两个组合的最佳方法是什么?有这样一个任务的API吗?如何获得Java中的不同组合
即
private static List<String> getCombinations(String input) {
ArrayList<String> result = new ArrayList<String>();
int len = input == null ? 0 : input.length();
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
String combination = String.valueOf(input.charAt(i))
+ input.charAt(j);
System.out.println("adding: " + combination);
result.add(combination);
}
}
return result;
}
生成getCombinations("ABCDE");
adding: AB
adding: AC
adding: AD
adding: AE
adding: BC
adding: BD
adding: BE
adding: CD
adding: CE
adding: DE
没有API。阅读的最佳来源是克努特或这样的“计算机程序设计第1卷的艺术”:
1 + 1pseudocode:
String alphabet = "ABCDE";
for(int i = 0; i < alphabet.getLength(); i++){
for(int j = alphabet.getLength(); j > i; j--){
System.out.println(alphabet.substring(i, i+1) + alphabet.substring(j, j+1));
}
}
如果您需要更多类似的组合: BA CA 等等,那么因为只有2个字母,您可以切换它们的位置并将此过程的结果附加到生成的对。如果你需要三个等的组合,那么看看排列算法。
据我所知,目前这个问题并没有内置API。你必须编写你自己的代码。 – Garbage 2012-04-18 13:13:15