民间,
我尝试了数组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]这样的对。
我错过了什么吗?
答案 0 :(得分:1)
此代码生成集。集合[1, 2]
和[2, 1]
相等(集合不具有任何顺序)。因此,输出中仅存在[1,2]
。
[HashSet]不保证集合的迭代顺序;在 特别是,它不保证订单将保持不变 随着时间的推移。
因此打印[1, 2]
是巧合。它也可能是[2, 1]
。
答案 1 :(得分:0)
正如我们已经写过的那样,根据定义,集合[1,2]与[2,1]相同。但是如果你看一下代码以便为什么这是正确的,那么你会注意到1是被添加的,之后它会继续一次,没有它(当它被删除时),但是一旦得到了2,它永远不会返回索引1.