输出一个集合的所有子集合-Java代码实现(一)
来源:互联网 发布:招行信用卡 知乎 编辑:程序博客网 时间:2024/06/07 00:49
找出一个集合的所有子集合,用排列组合的方式来解答此问题的话,假设集合里面有n个元素,那个子集合的数目为2^n.
具体思路为:对于集合里面的任何一个元素,有两种可能,一种是在子集合里,另一种是不在子集合里。假如我们已经得到n-1个元素的子集合,那么n个元素的子集合是:n-1个元素的子集合 + n-1个元素的子集合中的所有集合都添加进额外的那个元素。在本题中,将集合划分为 set[0] 和set[1...n-1];
递归思路,代码如下:
static ArrayList<ArrayList<Integer>> getSubsets(ArrayList<Integer> set, int index){ArrayList<ArrayList<Integer>> allsubsets;if(set.size() == index){ allsubsets = new ArrayList<ArrayList<Integer>>();allsubsets.add(new ArrayList<Integer>()); //empty set}else{allsubsets = getSubsets(set, index+1);int item = set.get(index);ArrayList<ArrayList<Integer>> moresubsets = new ArrayList<ArrayList<Integer>>();for(ArrayList<Integer> s: allsubsets){ArrayList<Integer> newSubset = new ArrayList<Integer>();newSubset.addAll(s);newSubset.add(item);moresubsets.add(newSubset);}allsubsets.addAll(moresubsets);}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 = getSubsets(s, 0);for(ArrayList<Integer> set : allsubsets){System.out.println(set);}
输出结果如下:
[]
[3]
[2]
[3, 2]
[1]
[3, 1]
[2, 1]
[3, 2, 1]
0 0
- 输出一个集合的所有子集合-Java代码实现(一)
- 输出一个集合的所有子集合-Java代码实现(二)
- 输出一个集合所有的子集合
- 输出一个集合的所有子集合
- 一个集合的所有子集的Java代码实现
- 给定一个集合,输出它的所有子集(JAVA实现)
- 输出一个集合的所有子集
- 输出一个集合的所有子集
- 输出一个集合的所有子集(算法)
- 输出一个集合的所有子集(算法)
- 输出一个集合的所有子集(算法)
- 输出一个集合的幂集(所有子集)
- 递归计算一个集合的所有子集合
- 给出一个集合,怎么的到他的所有子集合?
- 输入一个集合,输出这个集合的所有子集
- 求一个集合的所有子集(二进制实现)
- 输出集合的所有子集
- 求集合的所有子集(java实现)
- 华为交换机配置
- TCP/IP协议
- POJ 2506:Tiling
- java压缩zip文件中文乱码问题 linux 下
- 适应全分辨率的div的居中 像TABLE那种
- 输出一个集合的所有子集合-Java代码实现(一)
- ecshop与jquery冲突解决方案(绝对可行)
- 关于JS函数的语法分析和执行
- LA-3882 And Then There Was One
- Java NIO框架Netty教程(二) – 白话概念
- html table 边框和分割线显示和隐藏问题
- File下载
- Training--重建一个Activity
- mustache.js的一些例子