前几天导师让写一个数据挖掘的算法,用到了一个求一个字符串数组子集的算法,现在总结一下,说不定下次还可以用到。
java 代码如下:
package com.xing.test;
import java.util.Arrays;
import java.util.LinkedList;
/**
*
* @author LiuYinxing
*
*/
public class Combination {
public void getCombination(String[] a, int c, int i, int n, String[] b,LinkedList<String> linkedList){
// a原始数组,c循环的开始值,i数组b索引,n控制递归的次数,b存放结果的数组
for (int j = c; j < a.length - (n - 1); j++) {
b[i] = a[j];
if (n == 1) {
linkedList.add(Arrays.toString(b));
} else {
n--;
i++;
getCombination(a, j + 1, i, n, b,linkedList);// 递归调用
n++;//还原n,i的值
i--;
}
}
}
public static void main(String[] args) {
String[] a = { "1","2", "3" };
LinkedList<String> linkedList = new LinkedList<>();
Combination combination = new Combination();
for (int n = 1; n <= a.length; n++) {
String[] b = new String[n];// 存放组合结果的数组
combination.getCombination(a, 0, 0, n, b,linkedList);
}
for (String string : linkedList) {
System.out.println(string);
}
}
}
运行结果: