-1

Folks,

I tried the code for k-size subset of an array. It prints the array subset, but doesn't show up the pairs like [1,2] and [2,1].

Below is my code :-

class KSizeSubSetArray {

    private static void getSubsets(List<Integer> superSet, int k, int idx, Set<Integer> current,List<Set<Integer>> solution) {

            if (current.size() == k) {
                solution.add(new HashSet<Integer>(current));
                return;
            }

            if (idx == superSet.size()) 
                return;

            Integer x = superSet.get(idx);
            current.add(x);


            getSubsets(superSet, k, idx+1, current, solution);

            current.remove(x);

            getSubsets(superSet, k, idx+1, current, solution);
        }

        public static List<Set<Integer>> getSubsets(List<Integer> superSet, int k) {
            List<Set<Integer>> res = new ArrayList<Set<Integer>>();
            getSubsets(superSet, k, 0, new HashSet<Integer>(), res);
            return res;
        }

        public static void main(String[] args) {

                List<Integer> superSet = new ArrayList<Integer>();
                superSet.add(1);
                superSet.add(2);
                superSet.add(3);
                superSet.add(4);
                System.out.println(getSubsets(superSet,2));

        }
}

The above code prints the output :-

[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]

But I'm expecting to print both pairs like [1,2] and [2,1].

Am I missing something ?

4

2 回答 2

1

此代码生成集合。集合[1, 2][2, 1]相等(集合没有任何顺序)。因此,仅存[1,2]在于输出中。

文档中:

它 [HashSet] 不保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变。

所以[1, 2]打印出来是巧合。它也可能是[2, 1]

于 2013-07-26T14:47:32.553 回答
0

正如我们已经写过的,根据定义,集合 [1,2] 与 [2,1] 相同。但是,如果您查看代码以了解为什么这是正确的,那么您会注意到添加了 1,然后继续使用它一次,并且没有它(当它被删除时),但是一旦得到2,它永远不会返回到索引 1。

于 2013-07-26T14:53:22.473 回答