输出一个集合的所有子集合-Java代码实现(二)
2014-07-08 16:39
603 查看
接上篇,提供另外一种解题思路:
对于集合里面的任何一个元素,有两种可能,一种是在子集合里,另一种是不在子集合里。在子集合里的话用1表示,不在的话用0表示,那么一个集合的子集合都可以用二进制表示,假设集合为{1,2,3},那么可以用下列二级制表示:000,001,010,011......共有2^n种表示。
代码如下:
[]
[1]
[2]
[1, 2]
[3]
[1, 3]
[2, 3]
[1, 2, 3]
对于集合里面的任何一个元素,有两种可能,一种是在子集合里,另一种是不在子集合里。在子集合里的话用1表示,不在的话用0表示,那么一个集合的子集合都可以用二进制表示,假设集合为{1,2,3},那么可以用下列二级制表示:000,001,010,011......共有2^n种表示。
代码如下:
static ArrayList<ArrayList<Integer>> getSubsets2(ArrayList<Integer> set){ ArrayList<ArrayList<Integer>> allsubsets = new ArrayList<ArrayList<Integer>>(); int max = 1 << set.size(); //how many sub sets for(int i=0; i<max; i++){ int index = 0; int k = i; ArrayList<Integer> s = new ArrayList<Integer>(); while(k > 0){ if((k&1) > 0){ s.add(set.get(index)); } k>>=1; index++; } allsubsets.add(s); } return allsubsets; } public static void main(String[] args){ ArrayList<Integer> s = new ArrayList<Integer>(); s.add(1); s.add(2); s.add(3); ArrayList<ArrayList<Integer>> allsubsets = getSubsets2(s); for(ArrayList<Integer> set : allsubsets){ System.out.println(set); } }输出结果如下:
[]
[1]
[2]
[1, 2]
[3]
[1, 3]
[2, 3]
[1, 2, 3]
相关文章推荐
- 输出一个集合的所有子集合-Java代码实现(一)
- 一个集合的所有子集的Java代码实现
- 给定一个集合,输出它的所有子集(JAVA实现)
- java实现找出所有的最大连通子图,并把连通子图中所有顶点的集合合并为一个i额字符串集合。
- 输出一个集合所有冪集的代码
- java实现输出文件夹下某个格式的所有文件实例代码
- 假如现在有一堆长度大于3小于9的电话号码,用座机呼叫,如果出现这样的号码【123和12345】那么12345将永远不会被拨出,因为拨到123的时候电话已经呼出了,试写一个函数输出所有不能被呼出的电话号码(java实现)
- 用java实现将一个项目中所有的.java文件合并输出至某文件
- 编程:用java 语言实现,输入一个数,就相应地输出的几维数组!||用1、2、2、3、4、5这六个数字,用java写一个函数,打印出所有不同的排列,要求:"4"不能在第三位,"3"与"5"不能相连
- java实现输入一个链表,反转链表后,输出链表的所有元素。
- 输入一个正数 n,输出所有和为 n 连续正数序列。 java实现
- Java 组合的实现- 输入一个字符,输出字符中字母组成的所有组合
- Java 求1-100以内的所有素数,判断一个数是不是素数。Java代码实现附测试结果图
- Java实现输入一个整数将该整数之前的所有素数输出出来
- java实现输入一个正整数n,输出全部连续正整数相加后等于n的所有序列。
- 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
- 第一次动手写java的简单代码,实现输出一个空心菱形。
- <C语言>如何一步一步根据简单的代码联想到更多的功能?(实现输入一个整数,输出比它小包括它本身的所有素数。)
- Java数组反射实现动态的判断一个对象书否是数组,并且对数组进行拆包输出 。。
- Java数组反射实现动态的判断一个对象书否是数组,并且对数组进行拆包输出 。。