0

我有这个代码......这正是我需要的。它在一个预定义的整数数组中搜索总和为目标整数的两个整数。但是,当将值放入向量中时,它不是将它们放在单元格中,而是将所有值放在一起。即对于 int array[50,40,30,20,10] 和目标 50,而不是返回 [[50][40,10][30,20]...等],它打印 [[50,40 ,10,30,20...]] 我该如何解决这个问题?

public Vector<Vector<Integer>> subsetSum(int[] array, int target) {
    //creates vectors, adds inner vector to another vector
    outer = new Vector<Vector<Integer>>();
    inner = new Vector<Integer>();
    outer.add(inner);

    for (int k = 0; k < array.length; k++) {
        for (int l = 1; l < array.length; l++) {
            int sum = array[k]+array[l]; //sum of l and k
            if (sum == target) {
                //add l,k to vector
                inner.add(array[l]);
                inner.add(array[k]);
                //prints l and k if their sum equals target
                System.out.println(array[l]+"+"+array[k]+"="+target);
            }
            else {
                System.out.print("");
            }
        }
        //if k is the target, display
        if (array[k] == target) {
            //add k to vector
            inner.add(array[k]);
            //prints if int equals target
            System.out.println(array[k]+"="+target);
        }
    }
    //return combinations that add up to target in vector form
    return outer;
}
4

5 回答 5

3

您只会将单个向量添加到outer. 如果您找到一对加起来达到所需总和的情况,您是否希望它们位于不同的向量中?因此,当发生这种情况时,您需要创建一个新的“内部”向量,并将其添加到outer.

删除这些行:

inner = new Vector<Integer>();
outer.add(inner);

改变:

if (sum == target) {
    inner = new Vector<Integer>();
    outer.add(inner)
    //add l,k to vector
    inner.add(array[l]);
    inner.add(array[k]);

和:

if (array[k] == target) {
    inner = new Vector<Integer>();
    outer.add(inner)
    //add k to vector
    inner.add(array[k]);

最后,考虑将innerouter转化为局部变量。

于 2011-10-20T04:10:49.857 回答
0

我认为你的错误在于首先在外部添加向量值,所以它只返回外部向量的所有值而不是内部向量..必须在检查条件后添加

    if (array[k] == target) {
        //add k to vector
        inner.add(array[k]);
        //prints if int equals target
        System.out.println(array[k]+"="+target);
    }
    outer.add(inner)
于 2011-10-20T04:08:57.517 回答
0

移动这两行:

inner = new Vector<Integer>();
outer.add(inner);

进入外循环(带有索引变量的循环k。)

于 2011-10-20T04:10:24.247 回答
0

另外,您是否打算拥有一个向量向量?因为目前,你有一个向量,其中有一个名为 inner 的向量,所以所有内容都直接添加到 inner。您不是每次都创建一个新向量来放入每一对。

于 2011-10-20T04:11:26.080 回答
0

Deepa 的答案已经完成了一半,但您还需要innerfor循环中创建一个新实例,然后再向其中添加值;否则,您最终会得到 one 中的所有值inner。像这样:

final Vector<Integer> inner = new Vector<Integer>();
outer.add(inner);

您也可以continue在添加后稍微提高性能。

于 2011-10-20T04:13:11.913 回答