K - 数组的大小子集

时间:2013-07-26 14:35:56

标签: java arrays algorithm data-structures

民间,

我尝试了数组k大小子集的代码。它打印数组子集,但不显示像[1,2]和[2,1]这样的对。

以下是我的代码: -

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));

        }
}

上面的代码打印输出: -

  

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

但是我希望打印像[1,2]和[2,1]这样的对。

我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

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

来自documentation

  

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

因此打印[1, 2]是巧合。它也可能是[2, 1]

答案 1 :(得分:0)

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