编写一个方法,返回某集合的所有子集
2015-08-29 20:45
501 查看
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>());//空集合
}
else
{
allsubsets=getSubsets(set,index+1);
int item=set.get(index);
ArrayList<ArrayList<Integer>> moresubsets=new ArrayList<ArrayList<Integer>>();
for(ArrayList<Integer> subset:allsubsets)
{
ArrayList<Integer> newsubset=new ArrayList<Integer>();
newsubset.addAll(subset);
newsubset.add(item);
moresubsets.add(newsubset);
}
allsubsets.addAll(moresubsets);
}
return allsubsets;
}
ArrayList<ArrayList<Integer>> getSubsets2(ArrayList<Integer> set)
{
ArrayList<ArrayList<Integer>> allsubsets=new ArrayList<ArrayList<Integer>>();
int max=1<<set.size();//计算2^n;
for(int k=0;k<max;k++)
{
ArrayList<Integer> subset=convertIntToSet(k,set);
allsubsets.add(subset);
}
return allsubsets;
}
ArrayList<Integer> convertIntToSet(int x,ArrayList<Integer> set)
{
ArrayList<Integer> subset=new ArrayList<Integer>();
int index=0;
for(int k=x;k>0;k>>=1)
{
if((k & 1)==1)
{
subset.add(set.get(index));
}
index++;
}
return subset;
}
相关文章推荐
- leetcode Container With Most Water
- Bootstrap学习之Carousel
- 匿名内部类
- poj 1700 Crossing River(贪心·dp)
- POJ 2528 Mayor's posters(线段树+离散化)
- 半路程序员
- 分区表fstab
- 初识JAVA2(数组、类、对象、构造器)
- 包装类
- 【JAVA】.jar与sources.jar浅谈~~么么哒
- J2EE面试题集
- Spring 容器(一)
- 【软考】递归调用
- 【实例】html-canvas中实现图片的放大
- android系统service组件的线程关系
- JavaScript打开新页面的方法
- poj 1077 hdu 1043 Eight 八数码问题 DBFS(双向广度优先搜索)a*算法 康拓展开
- Permission is only granted to system apps
- 实时监听输入框值变化:oninput & onpropertychange
- 工具---定时器