有一个List<String> a;现在要求写一个方法,功能如下:
传入a之后,比如a的内容为“qwe”,“ui”,“fgh”,求出所有第一个字母为qwe中的一个,第二个字母为ui中的一个,第三个字母为fgh中的一个的可能(quf,qug,quh,qif,qig,qih,wuf,wug,wuh,euf,euh,eug,qif,qig,qih.........),类似于全排列,但又比较特殊,请各位大侠附上具体代码,不胜感激~
传入a之后,比如a的内容为“qwe”,“ui”,“fgh”,求出所有第一个字母为qwe中的一个,第二个字母为ui中的一个,第三个字母为fgh中的一个的可能(quf,qug,quh,qif,qig,qih,wuf,wug,wuh,euf,euh,eug,qif,qig,qih.........),类似于全排列,但又比较特殊,请各位大侠附上具体代码,不胜感激~
就在每个字符串中用随机数取一个字符
最后组合成一个string 可以么
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List list = new ArrayList();
list.add("qwe");
list.add("ui");
list.add("fgh");
sort(list);
}
private static void sort(List list){
Object[] str = list.toArray();
boolean b = true;
String[] s = null;
for(int i=0; i<str.length-1;i++){
if(b){
s = get(toArr(str[i].toString()),toArr(str[i+1].toString()));
b = false;
}else{
s = get(s,toArr(str[i+1].toString()));
}
}
Arrays.sort(s);
System.out.println(Arrays.asList(s));
}
/**
* 每两个结合,与下个数组继续
* @param s1
* @param s2
* @return
*/
private static String[] get(String[] s1 , String[] s2){
String[] arr = new String[s1.length*s2.length];
int len = 0;
for(int i=0;i<s1.length;i++){
for(int j=0;j<s2.length;j++){
arr[len++] = s1[i]+s2[j];
}
}
return arr;
}
/**
* 转换数组
* @param s
* @return
*/
private static String[] toArr(String s){
String[] res = new String[s.length()];
String[] arr = s.split("");
int len = 0;
for(int j=0;j<arr.length;j++){
if(!"".equals(arr[j])){
res[len++] = arr[j];
}
}
return res;
}
我用的jdk是1.4的,没有泛型!
* @param args
*/
public static void main(String[] args) {
List<String> a=new ArrayList<String>();
a.add("abc");
a.add("def");
a.add("ghi");
sort("",-1,a);
}
public static void sort(String s,int index,List<String> a){
index++;
for(int i=0;i<a.get(index).length();i++){
if(index+1==a.size()){
System.out.println(s+a.get(index).charAt(i));
}
else{
sort(s+a.get(index).charAt(i),index,a);
}
} }}