【问题标题】:Recursion - Adding the subset of an array递归 - 添加数组的子集
【发布时间】: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;
}

【问题讨论】:

标签: java arrays recursion


【解决方案1】:

不是一个答案,而是一个似是而非的想法?

    for (int i = 0; i < array.length; i++) {
        // New sublist to store values from 0 to i
        int[] list = new int[array.length - 1];

        for (int j = 0; j < array.length; j++) {
            list[j] = array[j+1];
        }

        // Here you call this recursively with your Parent list from i+1
        // index and working list from 0 to i
        subsetSum(list, n, goal);
    }

    int sum = 0;
    for (int i = 0; i < array.length; i++) {
        sum += array[i];
    }

    if (sum == goal) {
        return true;
    }
    return false;

【讨论】:

  • @PopoFibo 诚然,我确实使用了您的代码!但我不知道如何改变它以适应我的场景。在过去的一个小时里,我一直在编写代码,却不知如何适应它!
  • 没有意识到您是 OP,是的,该链接本身就是为了您的利益 - 撤回我之前的评论
  • @PopoFibo 你能帮忙就如何完成这项工作提出建议吗?有一个错误,似乎无法弄清楚(仍然 - 经过这么多小时 - 多么愚蠢)
猜你喜欢
  • 2013-11-21
  • 1970-01-01
  • 2021-08-23
  • 2021-01-17
  • 2016-07-18
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多