Java实现遍历集合中的所有子集

问题描述:

对于一个给定的集合,遍历该集合的所有子集。

思路:

一、暴力解法

对一个集合,如果是有顺序的集合并且数量较小,如数组,我们可以定义两个角标i,j,分别从头递增和从尾递减,由此得到所有的子集。两个for循环,时间复杂度为O(n^2)。

二、递归

将遍历所有子集的问题可以看作是对该集合中的每一个元素取舍的过程,例如集合{1,2,3}


根节点是初始空集,每一行都是对一个元素取舍的过程,像这样对每一个元素都进行取舍完后,最终的叶子就是该集合的全部子集。从这里也可以看出有n个元素的集合有2^n个子集(包括空集,2^n-1个真子集),因为每一个元素都有两种选择。

三、按位对应法

对一个集合,例如{1,2,3},集合中的每一个元素用0和1表示其是否存在,那么一个集合就有2^3中可能:

{0,0,0},{0,0,1}...

猜你喜欢

转载自blog.csdn.net/softbreezee/article/details/79996064