この記事では、主に Java で集合の部分集合を解く例に関する関連情報を紹介します。この記事がすべての人に役立ち、必要な友達がこの方法をマスターできるように願っています。
方法 1: サブセット 2 の n 乗がわかります
たとえば、a、b、c のサブセット
* 000 0 011 3 a,b (b,a)
*100 4 c
* 110 6 b,c (c,b)
* 111 7 a,b,c
二項対応を使用する
@Test public void test1() throws Exception { Set<ArrayList<Integer>> subsets = getSubsets( Arrays.asList(1,2,6)); Set<ArrayList<String>> subsets2 = getSubsets( Arrays.asList("a","b","c")); Set<ArrayList<Character>> subsets3 = getSubsets( Arrays.asList('b','c','d')); System.out.println(subsets); System.out.println(subsets2); System.out.println(subsets3); } //集合接受各种类型数据 public <T> Set<ArrayList<T>> getSubsets(List<T> subList) { //考虑去重 Set<ArrayList<T>> allsubsets = new LinkedHashSet<>(); int max = 1 << subList.size(); for (int loop = 0; loop < max; loop++) { int index = 0; int temp = loop; ArrayList <T> currentCharList = new ArrayList<T>(); //控制索引 while (temp > 0) { if ((temp & 1) > 0) { currentCharList.add(subList.get(index)); } temp >>= 1; index++; } allsubsets.add(currentCharList); } return allsubsets; }
方法 2: 帰納法
以上がセットのサブセットを解決するための Java サンプル コード共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。