java求集合的子集演算法
阿新 • • 發佈:2019-01-22
步驟:1,求出從0到集合子集數目之間的數的二進位制形式 2,根據求的二進位制形式,把集合中在二進位制字串中對應數字為的1的元素取出來,為一個子集。 例子:求集合S(A,B,C,D)的全部子集 public class MySet { public static void main(String[] args) { TreeSet<String> set = new TreeSet<String> (); set.add("A"); set.add("B"); set.add("C"); set.add("D"); ArrayList<TreeSet<String>> subset = getSubset(set); System.out.println("一共有" + subset.size() + "個子集。"); for(TreeSet<String> ts : subset) { System.out.println(ts.toString()); } } //求出從0到集合子集數目(這裡為16)之間的數的二進位制形式,存放在陣列result中 public static String[] getBinaryValue(TreeSet<String> set) { int size = set.size(); int m = (int)Math.pow(2,size) - 1; String[] result = new String[m+1]; for(int i=m;i>-1;i--) { StringBuffer sb = new StringBuffer(Integer.toBinaryString(i)); int length = sb.length(); if(length < size) { for(int j=0;j<size-length;j++){sb.insert(0, "0");}