Java 求集合的所有子集
递归方法调用,求解集合的所有子集。
package ch01; import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set; public class QuerySubSet {
// 递归调用, 求出 Set的子集, 返回List列表
public static List<Set<Object>> Query(Set<Object> target)
{
// 如果 target为空, 则停止递归,并且 返回的list中 包含一个空集
if(target.size() == 0)
{
List<Set<Object>> list= new LinkedList<Set<Object>>();
list.add(target);
return list;
}
// 如果 target 中有一个元素, 那么改target的子集体包括 空集 和 自身
else if(target.size() == 1)
{
List<Set<Object>> list= new LinkedList<Set<Object>>();
list.add(target);
Set<Object> nullset=new HashSet<Object>();
list.add(nullset);
return list;
}
// 如果 target中的元素大于 1 个,则将target分成两个新的集合,并求出两个新集合的所有子集,再将两个List子集进行合并,即可以得到target的所有子集。
else
{
Iterator<Object> iter=target.iterator();
Object elem=iter.next();
target.remove(elem);
Set<Object> newSet=new HashSet<Object>();
newSet.add(elem); List<Set<Object>> list1=Query(newSet); // 递归调用
List<Set<Object>> list2=Query(target); // 递归调用
return merge(list1, list2); // 合并两个 list
}
}
// 合并两个list, 两次for循环遍历两个list列表。
public static List<Set<Object>> merge(List<Set<Object>> list1, List<Set<Object>> list2)
{
List<Set<Object>> mlist=new LinkedList<Set<Object>>();
for(Set<Object> set1: list1 )
for(Set<Object> set2: list2)
{
Set<Object> newSet=new HashSet();
newSet.addAll(set1);
newSet.addAll(set2);
mlist.add(newSet);
}
return mlist;
} /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Set<Object> targ=new HashSet<Object>();
for(int i=0; i<10; i++)
{
targ.add(Integer.toString(i));
} List<Set<Object>> allsubset= QuerySubSet.Query(targ); boolean f1=true;
for(Set<Object> set1: allsubset)
{
if(!f1)
System.out.print(",");
f1=false; System.out.print("{"); boolean f2=true;
for(Object obj: set1)
{
if(!f2)
System.out.print(",");
f2=false;
System.out.print(obj.toString());
}
System.out.println("}");
} } }
Java 求集合的所有子集的更多相关文章
- 傻瓜方法求集合的全部子集问题(java版)
给定随意长度的一个集合.用一个数组表示,如{"a", "b","c"},求它的全部子集.结果是{ {a}, {b}, {c}, {a,b}, ...
- DFS算法-求集合的所有子集
目录 1. 题目来源 2. 普通方法 1. 思路 2. 代码 3. 运行结果 3. DFS算法 1. 概念 2. 解题思路 3. 代码 4. 运行结果 4. 对比 1. 题目来源 牛客网,集合的所有子 ...
- JAVA求集合中的组合
好几个月没弄代码了,今天弄个求组合的DEMO 思路是将集合的每个值对照一个索引,索引大小是集合的大小+2.索引默认为[000...000],当组合后选取的组合值demo为[0100..00].然后根据 ...
- 【SICP读书笔记(五)】练习2.32 --- 递归求集合子集
题目内容: 我们可以将一个集合表示为一个元素互不相同的表,因此就可以将一个集合的所有子集表示为表的表.例如,假定集合为(1,2,3),它的所有子集的集合就是( () (3) (2) (2 3) (1) ...
- 年年有余之java求余的技巧集合
背景 传说里玉皇大帝派龙王马上降雨到共光一带,龙王接到玉皇大帝命令,立马从海上调水,跑去共光施云布雨,但粗心又着急的龙王不小心把海里的鲸鱼随着雨水一起降落在了共光,龙王怕玉皇大帝责怪,灵机一动便声称他 ...
- Java:集合,Collection接口框架图
Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...
- 【Java】集合_学习笔记
一.集合 1.集合类也称容器类,主要负责保存.盛装其他数据. 2.集合可以保存数量不确定的数据,保存具有映射关系的数据(也称关联数组). 3.Java5后提供一些多线程安全的集合类,放在java.ut ...
- java.util 集合框架集合
java的集合框架为程序提供了一种处理对象组的标准方式.设计了一系列标准泛型接口: ⑴Collection ()接口,扩展了Iterable接口,位于集合层次结构的顶部,因此所有的集合都实现Colle ...
- Java:集合框架的工具类
集合框架的工具类 Arrays:里面都是静态方法,直接用来对各种集合进行操作的公有方法. Collections:里面都是静态方法,直接用来对各种集合进行操作的公有方法. 包括: 1.asList将数 ...
随机推荐
- 5分钟把任意网站变成桌面软件--windows版
本文源自于segmentfault的一篇专栏文章:https://segmentfault.com/a/1190000012924855 只不过这篇是MAC版本的,所以我试了下windows版的: ...
- springboot之fastjson
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifac ...
- java事件处理机制
java中的事件机制的参与者有3种角色: 1.event object:就是事件产生时具体的"事件",用于listener的相应的方法之中,作为参数,一般存在与listerne ...
- 用 chrome 调试 node.js 代码
1.全局安装 node-inspector cnpm install -g node-inspector 2.启动node项目入口文件,如 node --inspect index.js 3.控制台 ...
- VisionPro学习笔记:用IEEE1394相机抓取图像
1)找到采集卡: CogFrameGrabber1394DCAMs cameras = new CogFrameGrabber1394DCAMs(); 2)列举相连接的相机: ICogFrameGra ...
- Centos7.3下mysql5.7.18安装并修改初始密码的方法
Centos7.3下mysql5.7.18安装并修改初始密码的方法 原文链接:http://www.jb51.net/article/116032.htm 作者:Javen205 字体:[增加 减小] ...
- 验证插件——jquery.validate.js
下载地址:http://download.csdn.net/download/s592652578/9457421 教程:http://www.runoob.com/jquery/jquery-plu ...
- CSS样式中常用的字体名称
css中引入字体: @font-face { font-family: "AncientWar"; src: url('style/css/fonts/AncientWar.ttf ...
- js设置滚动条位置
JS控制滚动条的位置: window.scrollTo(x,y); 竖向滚动条置顶(window.scrollTo(0,0); 竖向滚动条置底 window.scrollTo(0,document.b ...
- sed,n,N,d,D,p,P,h,H,g,G,x,解析
原文地址 这篇文章主要是我参考命令的,直接复制粘贴,有问题请拍砖 A. sed执行模板=sed '模式{命令1;命令2}' 即逐行读入模式空间,执行命令,最后输出打印出来 B. p打印当前模式空间所有 ...