Java | 求集合的所有子集

 

public class SubsetGenerator {
    public static  List> genSubsets(List set) {
        List> result = new LinkedList<>();
        if (set == null) { return result; }

        final int card = set.size();
        int[] memo = new int[card];

        for (int i = 0; i < card; i++) {
            memo[i] = 1 << (card - 1 - i);
        }

        for (int i = 1; i < (1 << card); i++) {
            List subset = new LinkedList<>();
            for (int j = 0; j < card; j++) {
                if ((i & memo[j]) > 0) {
                    subset.add(set.get(j));
                }
            }
            result.add(subset);
        }

        return result;
    }

    public static void main(String[] args) {
        List set = Arrays.asList(1, 2, 3, 4);
        List> subsets = genSubsets(set);
        subsets.forEach(System.out::println);
    }
}

 

你可能感兴趣的:(位运算,java)