最近没有项目,顺序做了一个算法。
题目:列出一组数据所有的组合内容。如一组数据:12345,则列出这组数据所有组合。组合项可以有一项,二项,三项.....。如合法项为:1,12,123,1234,12345。类似所有的组合。
自己考虑了半天用递归算法实现出来了。现把代码共享一下:
public class Test1 {
public static String[] arr = { "1", "2", "3", "4", "5" };
public static StringBuffer aTotalString = new StringBuffer();// 总共的字符串
public static StringBuffer aTemp = new StringBuffer();// 当前串值
public static void main(String[] args) {
listString(arr.length + 1);
System.out.println("aTotalString=" + aTotalString);
}
/**
* 2.编程:用java语言实现一组数据的所有组合项.
*
* @param num
*/
public static void listString(int num) {
if (num == 1) {
for (int i = 0; i < arr.length; i++) {
aTemp.append(arr[i] + ";");
}
return;
} else {
listString(num - 1);
aTotalString.append(aTemp);
String[] tempArray = aTemp.toString().split(";");
aTemp.setLength(0);
for (int i = 0; i < tempArray.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (check(tempArray[i], arr[j])) {
aTemp.append(tempArray[i] + arr[j] + ";");
}
}
}
}
}
/**
* 验证是否是重复的字段,例:13,3则是false, 13,4 则是true;
*
* @param value
* @param letter
* @return
*/
public static boolean check(String value, String letter) {
for (int i = 0; i < value.length(); i++) {
if (value.substring(i, i + 1).equals(letter)) {
return false;
}
}
return true;
}
}
该方法实现这一组数据快速组合算法。简单、效率也比较高。