码迷,mamicode.com
首页 > 其他好文 > 详细

编写一个方法,返回某集合的所有子集

时间:2015-08-29 21:44:46      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

技术分享技术分享技术分享技术分享

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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

编写一个方法,返回某集合的所有子集

标签:

原文地址:http://blog.csdn.net/wangfengfan1/article/details/48055505

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!