求JAVA算法:这里有A,B,C,D,E五个字符串,求出五个字符串的所有任意组合(五个字符串可以不同时出现)
发布网友
发布时间:2022-04-10 00:42
我来回答
共5个回答
懂视网
时间:2022-04-10 05:04
java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/*
* 统计abacbacdadbc中的每个字母出现的次数,输出格式是:a(4)b(3)c(3)d(2)
*
* 选中TreeMap的原因是:key不重复且按顺序排序取出
*
* 思路:
* 1.将字符串abacbacdadbc转换成字符数组
* 2.分别取字符,与TreeMap中的key进行比较
* 2.1 如果TreeMap中存在对应的字符,则取出并自增,再存入TreeMap
* 2.2 如果TreeMap中不存在对应的字符,则直接存入该字符,value=1
*/
public class A3B1C2_TreeMapTest {
public static void main(String[] args) {
TreeMap<String, Integer> tm=new TreeMap<>();
String string="abacbacdadbc";
char[] ch=string.toCharArray();
for(char r :ch){
//tm.put(String.valueOf(r), 1);
//System.out.println(r);
if(compareKey(r, tm))
{
int i=tm.get(String.valueOf(r));
i++;
tm.put(String.valueOf(r), i);
}else {
tm.put(String.valueOf(r), 1);
}
}
System.out.println(tm);
Set<Map.Entry<String, Integer>> entrySet=tm.entrySet();
Iterator<Map.Entry<String, Integer>> iterator=entrySet.iterator();
while(iterator.hasNext()){
Map.Entry<String, Integer> me=iterator.next();
String key=me.getKey();
int value=me.getValue();
System.out.print(key+"("+value+")");
}
}
public static boolean compareKey(char c,TreeMap<String, Integer> treeMap){
if (treeMap.containsKey(String.valueOf(c))) {
return true;
}
return false;
}
}
java统计abacbacdadbc中的每个字母出现的次数,输出格式是:a(4)b(3)c(3)d(2)
标签:dad boolean 输出 ati sys color blog ++ 统计
热心网友
时间:2022-04-10 02:12
有些人的用复制数列,算法低效、粗野浪费。
给你个、 高效、简洁而且泛型通用的全组合:
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
热心网友
时间:2022-04-10 03:30
你看一下这个代码吧。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);
}
}
}
热心网友
时间:2022-04-10 05:04
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 等等之类的组合,同一字符串不在一个组合里重复出现,一个组合也不需要含有全部字符,请帮忙在看看!!
热心网友
时间:2022-04-10 06:56
递归求组合 自己去思考 思路已经给你了