2011-06-20 58 views
0

我喜歡這個下面的問題你的幫助下式給出:創建從一組子組大小爲k的interval-使用設置在Java

我想用Java編寫會得到三個值的方法:first,last和K,因此在有界區間[first,last]內創建所有大小爲L的數字的子集,例如:如果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:這是正確的在這種情況下使用set的實現嗎? 說實話,我不知道爲什麼我在這裏使用它。我可以在這裏使用HasgTree嗎?這種情況下的主題有沒有區別?

If(K==0) { 

問題2: 所以在這裏我想返回一個空集我定義的類型, 應該怎麼辦,可以 我添加一個空集到結果集?

return result; 
} 

現在主要問題(3):我不明白我的算法應該如何工作,我應該如何使用這個集合來編寫它。

謝謝你的幫助。

回答

1

這聽起來像功課(如果是,請其標記爲這樣),所以我只給一些提示:

  1. HashSet應該做的工作。但是,請注意,爲使HashSet像數學集合一樣工作(即它不能包含同一元素的多次出現),元素類型(在此例中爲Set<Integer>)必須具有equals()hashCode()實現,這些實現告訴HashSet兩個元素是平等的。大多數Set實現沒有按照您期望的方式實現這些方法,但您可能不需要這裏。請記住不要多次添加相同的設置。
  2. new HashSet<Set<Integer>>()一個空集。如果你添加一個集合,它不再是空的。
  3. 一組可以被認爲是一個二進制數。如果你的範圍是2-5,你可以選擇的元素是{2, 3, 4, 5}。該集合的任何子集都可以表示爲一個四位數的二進制數,每個數字對應於主集中的一個元素,如果該元素在子集中則爲1;如果不是,則爲0。因此子集{3, 5}0101(2不存在,3存在,4不存在,5存在)和{2, 3, 4}1110。因此,如果您可以找到創建具有正確位數的所有二進制數字以及如何基於每個數字創建子集的方法,則可以使用算法。
相關問題