【发布时间】:2014-03-02 17:57:15
【问题描述】:
我正在尝试确定子集的总和是否为集合数)...
到目前为止,我已经阅读了 stackoverflow 上的大部分问题,但一无所获。我认为我发现的问题是我想将创建的组合子集中的元素加在一起。所有这些都应该递归地完成。使用我拥有的当前代码,我得到一个用于递归的 stackoverflow 错误。 (讽刺)
所以澄清一下:
int[] 数组 = {1,2,3,4,5}; 子集将是 2 的大小,组合将是
{1,2},{1,3},{1,4},{1,5},{2,3},{2,4},{2,5},{3,4} ,{3,5},{4,5} 从这些数据中我想看看子集是否说...等于 6,那么答案将是:{1,5} 和 {2,4} 让我得到 true 作为答案。关于签名,我想保持不变,因为它对应于另一个方法(问题之外,因为它只将数组、n 和 num 发送到方法)
public static boolean subset(int[] array, int n, int num) {
int count = 0;
int sum = 0;
int[] subarray = new int[n];
int[] temp = new int[array.length - 1];
int[] copy = array;
subarray[count] = array[0];
for (int i = 0; i < n; i++) {
subarray[count] = array[i];
count++;
System.arraycopy(array, i, temp, 0, n);
}
for (int j = 0; j < subarray.length; j++) {
sum += subarray[j];
if (sum == num)
return true;
}
subset(copy, n, goal);
return false;
}
【问题讨论】:
-
为什么递归会重新创建自己?