求JAVA算法:这里有A,B,C,D,E五个字符串,求出五个字符串的所有任意组合(五个字符串可以不同时出现)

如题所述

有些人的用复制数列,算法低效、粗野浪费。

给你个、 高效、简洁而且泛型通用的全组合:
public class Test{
public static void main(String[] args) {
String[] a = { "A", "B", "C", "D", "E" };
for(int i=1;i<=a.length;i++){
System.out.println(a.length+"选"+i);
String[] res=new String[i];
combine(a,0,res,0);
}
}
final static public void combine(final Object a[], final int a_pos,final Object rs[], final int rs_pos)
{
if(rs_pos>=rs.length){
for(int i=0;i<rs.length;i++) System.out.print(rs[i]+" ");
System.out.println();
}else for(int ap=a_pos; ap<a.length; ap++){
rs[rs_pos]=a[ap]; combine(a,ap+1,rs,rs_pos+1);
}
}
}
=======
5选1
A
B
C
D
E
5选2
A B
A C
A D
A E
B C
B D
B E
C D
C E
D E
5选3
A B C
A B D
A B E
A C D
A C E
A D E
B C D
B C E
B D E
C D E
5选4
A B C D
A B C E
A B D E
A C D E
B C D E
5选5
A B C D E
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-03
你看一下这个代码吧。1-5长度的所有不重复组合。
--------------------------------------------------------------------
import java.util.ArrayList;
import java.util.Arrays;
public class T {
private String[] array = { "A", "B", "C", "D", "E" };
public static void main(String[] args) {
new T().execute();
}
public void execute() {
ArrayList<String> list = new ArrayList();
list.addAll(Arrays.asList(array));
for (int len = 1; len <= 5; len++) {
combination(list, "", len);
}
}
public void combination(ArrayList<String> list, String result, int len) {
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
result += str;
if (result.length() == len) {
System.out.println(result);
} else {
ArrayList<String> copylist = (ArrayList<String>) list.clone();
copylist.remove(str);
combination(copylist, result, len);
}
result = result.substring(0, result.length() - 1);
}
}
}本回答被提问者和网友采纳
第2个回答  2012-08-25
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Test t = new Test();
t.init();
}
public void init(){
String arr[] = new String[5];
arr[0] = "A";
arr[1] = "B";
arr[2] = "C";
arr[3] = "D";
arr[4] = "E";
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
for (int k = 0; k < arr.length; k++) {
for (int m = 0; m < arr.length; m++) {
for (int n = 0; n < arr.length; n++) {
String ssString = arr[i]+arr[j]+arr[k]+arr[m]+arr[n];
System.out.println(ssString);
}
}
}
}
}
}
}追问

这里算出的结果出现同一字符串重复。我还需要比如:AB AC AD ABC ABD BA CA DA CBA BCA 等等之类的组合,同一字符串不在一个组合里重复出现,一个组合也不需要含有全部字符,请帮忙在看看!!

第3个回答  2012-09-03
递归求组合 自己去思考 思路已经给你了
相似回答