当前位置: 代码迷 >> Java相关 >> java算法 排列组合,该如何处理
  详细解决方案

java算法 排列组合,该如何处理

热度:583   发布时间:2016-04-22 21:10:18.0
java算法 排列组合
最近要做一个根据拼音首字母检索数据的功能,但是有的汉字是多音字,导致一个汉字对应多个首字母。比如重阳就是 zhong yang 和chong yang,对应的首字母分别是z y 和 c y 。这两个排列组合都要得到。所以问题就是, 比如  [a,b,c],[b],[f],[f,d] 这种数据格式,怎么排列成为 : abff, abfd, bbff,bbfd,cbff,fbfd这种排列组合;顺序不能变。各位大侠。求算法。。。。。。
------解决方案--------------------
按照人的思维列举,我是这样做的

import java.util.ArrayList;
import java.util.Arrays;

class ArrayIndex {
private int index;
private int[] limits;
private int[] indexs;
public ArrayIndex(int[] limits) {
this.limits=limits;
indexs=new int[limits.length];
}
public int[] get() {
return indexs;
}
public int[] next() {
for (int i=index; i<indexs.length; i++) {
if (++indexs[i]<limits[i]) {
return indexs;
}
indexs[i]=0;
}
return null;
}
}

class Test {
public static void main(String[] args) {
char[][] params=new char[][]{{'a','b','c'},{'b'},{'f'},{'f','d'}};
String[] rs=getPermutations(params);
for (String r : rs) {
System.out.println(r);
}
}
public static String[] getPermutations(char[][] params) {
StringBuffer buffer=new StringBuffer();
ArrayList<String> list=new ArrayList<String>();
int[] lengths=new int[params.length];
for (int i=0; i<params.length; i++) {
lengths[i]=params[i].length;
}
ArrayIndex arrayIndex=new ArrayIndex(lengths);
int[] indexs=arrayIndex.get();
do {
buffer.setLength(0);
for (int i=0; i<params.length; i++) {
buffer.append(params[i][indexs[i]]);
}
list.add(buffer.toString());
indexs=arrayIndex.next();
} while (indexs!=null);
return list.toArray(new String[list.size()]);
}
}
  相关解决方案