位运算:获取集合的子集

设集合的元素个数为m,则集合的子集个数为2^m,可用0—2^m-1表示m的所有子集。

例:集合{3,6,7},元素个数为3,子集个数为8

则正好可以用0—7表示这8个子集

0  0  0:{}

0  0  1:{7}

0  1  0:{6}

0  1  1:{6,7}

1  0  0:{3}

1  0  1:{3,7}

1  1  0:{3,6}

1  1  1:{3,6,7}

代码如下:

public static List<List<Integer>> getSubSets(List<Integer> set){
    List<List<Integer>> result = new LinkedList<>();
    for(int i=0;i<Math.pow(2,set.size());++i){
        List<Integer> subSet = new LinkedList<>();
        for(int j=0,index=i;j<set.size();++j,index>>=1)
            if((index&1)==1)
                subSet.add(set.get(j));
        result.add(subSet);
     }
    return result;
}

 

转载于:https://www.cnblogs.com/xiehuazhen/p/10153914.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值