输入:[first col, 第二列, 第三栏]
输出:第一列,第二列,第三列,第一列+第二列,第一列+第三列,第二列+第三列 对于三个col也是如此。
注意:我不想要相同的组合,例如:第一个col +第二个col和第二个col + first都是相同的。 对于三列如:a + b + c和b + c + a两者是相同的。我不想要那个重复的列。请帮帮我。
我尝试使用下面的代码,但它也给了我一个重复的组合。
//准备组合..
public static void perm2(ArrayList<String> a) throws IOException {
ArrayList<String> sub = new ArrayList<String>();
perm2(sub, a);
}
static String inputFileLocation = "";
public static void perm2(ArrayList<String> sub, ArrayList<String> a)
throws IOException {
int L = a.size();
int g = 0;
String result = "";
String newLine = System.getProperty("line.separator");
if (L != 0) {
for (int i = 0; i < L; i++) {
ArrayList<String> ab = new ArrayList<String>(sub);
ab.add(a.get(i));
ArrayList<String> bc = new ArrayList<String>(a);
bc.remove(i);
perm2(ab, bc);
/* ArrayList to Array Conversion */
String array[] = new String[ab.size()];
for (int j = 0; j < ab.size(); j++) {
array[j] = ab.get(j);
System.out.println("Array: "+ array[j]);
}
for (int k = 0; k < array.length; k++) {
if (k == 0) {
result = array[k];
} else {
result = "+" + array[k];
}
System.out.print(result);
for (g = array.length; g > 0; g--) {
if (array.length == g) {
inputFileLocation = "C:\\project\\"
+ g + "ColumnData.txt";
writeToFile(result, inputFileLocation);
}
}
}
writeToFile(newLine, inputFileLocation);
System.out.println();
}
}
}
答案 0 :(得分:0)
我还没有完整的代码,但你不能做这样的事情:
bc.remove(i);
只有i
的值仍然小于列表的大小,此语句才会有效。一旦i
变得超过列表的大小,这将是一个问题。
你应该这样做:
bc.remove(0);