输出集合的所有子集java_输出一个集合的所有子集合-Java代码实现(一)

找出一个集合的所有子集合,用排列组合的方式来解答此问题的话,假设集合里面有n个元素,那个子集合的数目为2^n.

具体思路为:对于集合里面的任何一个元素,有两种可能,一种是在子集合里,另一种是不在子集合里。假如我们已经得到n-1个元素的子集合,那么n个元素的子集合是:n-1个元素的子集合 + n-1个元素的子集合中的所有集合都添加进额外的那个元素。在本题中,将集合划分为 set[0] 和set[1...n-1];

递归思路,代码如下:

static ArrayList> getSubsets(ArrayList set, int index){

ArrayList> allsubsets;

if(set.size() == index){

allsubsets = new ArrayList>();

allsubsets.add(new ArrayList()); //empty set

}else{

allsubsets = getSubsets(set, index+1);

int item = set.get(index);

ArrayList> moresubsets = new ArrayList>();

for(ArrayList s: allsubsets){

ArrayList newSubset = new ArrayList();

newSubset.addAll(s);

newSubset.add(item);

moresubsets.add(newSubset);

}

allsubsets.addAll(moresubsets);

}

return allsubsets;

}

public static void main(String[] args){

ArrayList s = new ArrayList();

s.add(1);

s.add(2);

s.add(3);

ArrayList> allsubsets = getSubsets(s, 0);

for(ArrayList set : allsubsets){

System.out.println(set);

}

输出结果如下:

[] [3] [2] [3, 2] [1] [3, 1] [2, 1] [3, 2, 1]

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

树非树

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值