博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java求出一个给定集合的所有子集
阅读量:6204 次
发布时间:2019-06-21

本文共 1374 字,大约阅读时间需要 4 分钟。

hot3.png

思路:

        假设集合有4个元素{a,b,c,d},那么做一个for循环从0到15,每次输出一个子集。0(0000)表示空子集,1(0001)因为最低位为1,所以在集合四个元素中取第一个元素{a}作为一个子集,2(0010)因为次低位为1,所以在集合四个元素中取第二个元素{b}作为一个子集,3(0011)因为最低位和次低位都为1,所以在集合四个元素中取第一、第二个元素{a,b}作为一个子集......,依次类推15(1111)表示{a,b,c,d}。

再举个详细例子:
假设有集合{a,b,c},则:
迭代0到2^n-1==0到7
0(000):{}
1(001):{a}
2(010):{b}
3(011):{ab}
4(100):{c}
5(101):{a,c}
6(110):{b,c}
7(111):{a,b,c}

代码:

package demo16;import java.util.HashSet;import java.util.Set;public class SubSet {	public static void main(String[] args) {		int[] set = new int[] { 1, 2 ,3};		Set
> result = getSubSet(set); // 调用方法 // 输出结果 for (Set
subSet : result) { for (Integer num : subSet) System.out.print(num); System.out.println(""); } } public static Set
> getSubSet(int[] set) { Set
> result = new HashSet
>(); // 用来存放子集的集合,如{ {},{1},{2},{1,2}} int length = set.length; int num = length == 0 ? 0 : 1 << (length); // 2的n次方,若集合set为空,num为0;若集合set有4个元素,那么num为16. // 从0到2^n-1([00...00]到[11...11]) for (int i = 0; i < num; i++) { Set
subSet = new HashSet
(); int index = i; for (int j = 0; j < length; j++) { if ((index & 1) == 1) { // 每次判断index最低位是否为1,为1则把集合set的第j个元素放到子集中 subSet.add(set[j]); } index >>= 1; // 右移一位 } result.add(subSet); // 把子集存储起来 } return result; }}

结果:

121231323123

 

转载于:https://my.oschina.net/u/2391658/blog/692442

你可能感兴趣的文章
越狱第一至五季/全集迅雷下载
查看>>
从Mysql slave system lock延迟说开去
查看>>
归并排序
查看>>
RecyclerView的下拉刷新和加载更多 动画
查看>>
ABAP常见面试问题
查看>>
程序猿是如何解决SQLServer占CPU100%的
查看>>
web.xml
查看>>
HBase-1.2.4LruBlockCache实现分析(一)
查看>>
SDN交换机在云计算网络中的应用场景
查看>>
革新以太网交换机架构 全光网络的风刮进园区
查看>>
物联网商机迸发 LPWAN芯片现身 本文转自d1net(转载)
查看>>
【eclipse转idea的第一天】配置idea
查看>>
error: Refusing toundefine while domain managed save image exists
查看>>
wordpress在新窗口打开留言者链接
查看>>
java开发过程中的命名规范
查看>>
mysql索引随记
查看>>
关于Pac-Man,你所要了解的 一切
查看>>
分布式配置管理平台Disconf
查看>>
pdf 字体和图片抽取
查看>>
Cisco Nexus 1000V
查看>>