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

 我来答
百度网友9308069
2012-09-03 · TA获得超过1万个赞
知道大有可为答主
回答量:3947
采纳率:89%
帮助的人:1928万
展开全部
有些人的用复制数列,算法低效、粗野浪费。

给你个、 高效、简洁而且泛型通用的全组合:
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
百度网友845f74e61
2012-09-03 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1629万
展开全部
你看一下这个代码吧。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);
}
}
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
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 等等之类的组合,同一字符串不在一个组合里重复出现,一个组合也不需要含有全部字符,请帮忙在看看!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leeyongjee
2012-09-03 · 超过16用户采纳过TA的回答
知道答主
回答量:182
采纳率:0%
帮助的人:63.4万
展开全部
递归求组合 自己去思考 思路已经给你了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式