【发布时间】:2019-10-29 02:23:58
【问题描述】:
我想从输入数组中返回所有可能组合的完整数组。我想生成 n 选择 k 组合,其中 k = 1 到 n。到目前为止,我非常不成功。
static void combinationUtil(String[] arr, String data[], int start, int end, int index, int r, float[][] info) {
// Current combination is ready to be printed, print it
strat newStrat = new strat(0, 0, 0, null);
if (index == r) {
//THIS IS WHERE THE COMBINATION I WANT APPEARS
return;
}
for (int i = start; i <= end && end - i + 1 >= r - index; i++) {
data[index] = arr[i];
combinationUtil(arr, data, i + 1, end, index + 1, r, info);
}
return;
}
public static void getCombinations(String[] arr, int n, int r, float[][] info) {
String[] data = new String[r];
combinationUtil(arr, data, 0, n - 1, 0, r, info);
}
public static void main(String[] args) throws IOException, InterruptedException {
//Array I want to get all k 1:n combinations of
String[] array = { "TST1", "TST2", "TST3"}
//start a timer because that's always fun
long startTime = System.nanoTime();
//cycle through all 'pick k values'
for (int i = 1; i < 8; i++) {
getCombinations(array, n, i, info);
}
//Math's up. How Long did that take?
long endTime = System.nanoTime();
//IDEALLY PRINT THE COMBINATIONAL ARRAY HERE
System.out.println(Arrays.deepToString(_____));
//Don't forget to print the time ;)
System.out.println("Duration: "+(endTime - startTime)+" ns");
}
我已经尝试了所有我能想到的和谷歌。从将“数据”数组传递给函数,将其与之前的自身连接,将旧数组复制到最新索引是最新“数据”的新数组,ArrayLists,Stacks,.push(),.add() ,获取可能组合的总数并将它们插入到全局数组索引中......没什么......我被烧毁了......当然理想的结果应该是这样的:
[["TST1"], ["TST2"], ["TST3"], ["TST1", "TST2"], ["TST1", "TST3"], ["TST2", "TST3"], ["TST1", "TST2", "TST3"]
在这一点上,甚至可以添加一点
"It is done. Go. Be happy!"
上面的代码运行良好,但是组合只出现在combinationUtil()中,而不是我想在main()中使用累积结果的地方。那么,我到底做错了什么?
【问题讨论】:
-
使
data成为类的静态成员变量(包含方法main),如:private static String[] data。这样你就可以从类中的任何地方访问它,包括内部方法main。
标签: java arrays string algorithm math