我很乐意帮助解决以下问题:
我想用Java编写一个方法,它将得到三个值:first,last和K,所以并创建有界区间内的所有大小为L的子集[first,last],
例如:如果first = 1,last = 3且K = 2,那么结果将是{1,2},{1,3},{2,3}。
好的,所以我决定函数的结果值是Set<Set<Integer>>
,但是我不确定我究竟需要做什么,算法和编写它的正确方法是什么。
public static Set<Set<Integer>> generateKsubsets(
int first, int last, int K){
Set<Set<Integer>> result = new HashSet<Set<Integer>>();
问题1:在这种情况下,这是正确的实施吗?
说实话,我不知道为什么我在这里使用它。我可以在这里使用HasgTree吗?在这种情况下主题之间有什么区别吗?
If(K==0) {
问题2:
所以在这里我想返回一个我定义的类型的空集,
我该怎么做?可以
我在结果集中添加一个空集?
return result;
}
现在主要问题(3):我无法理解我的算法应该如何工作以及如何使用这个集合来编写它。
感谢您的帮助。
答案 0 :(得分:1)
这听起来像家庭作业(如果是,请将其标记为这样),所以我只会给出一些提示:
HashSet
应该做的。但是,请注意,为了使HashSet
像数学集一样工作(即它不能包含同一元素的多次出现),元素类型(在本例中为Set<Integer>
)必须具有{{1 }}和equals()
实现,当两个元素相等时告诉hashCode()
。大多数HashSet
实现没有按照您期望的方式实现这些方法,但您可能不需要它。请记住不要多次添加相同的设置。Set
是一个空集。如果你为它添加一个集合,它就不再是空的。new HashSet<Set<Integer>>()
。该集合的任何子集都可以表示为具有四个数字的二进制数,每个数字对应于主集合中的元素,如果元素在子集中则为1,如果不在,则为0。因此,子集{2, 3, 4, 5}
为{3, 5}
(2不存在,3存在,4不存在,5存在),0101
为{2, 3, 4}
。因此,如果你能找到一种方法来创建具有正确位数的所有二进制数,以及如何根据每个数字创建一个子集,那么你就拥有了算法。