打印一个集合所有的子集和
题目
打印一个集合所有的子集和,比如{a,b,c}的子集和有{a},{b},{c},{a,b},{a,c},{b,c},{a,b,c}以及 空
解析
一个元素个数为n的集合所包含的所有组合的子集个数有2^n个,这样其实就可以将所以集合的情况映射到0~2^n-1个,然后按位取元素即可
比如{a,b,c}这个三元素的集合按位映射
{0,0,0}=>空
{0,0,1}=>{c}
{0,1,0}=>{b}
{0,1,1}=>{b,c}
.
.
.
{1,1,1}=>{a,b,c}
代码
1 | /** |
最终的复杂度为O(n*2^n)
,最主要的是这种方式代码写起来很方便
其测试代码为:1
2
3
4public static void main(String[] args) {
char[] cs={'a','b','c'};
subCollection(cs);
}
输出的结果为
a
b
ab
c
ac
bc
abc
参考
July微软100道面试题 忘了第哪一道 -_-
本作品采用[知识共享署名-非商业性使用-相同方式共享 2.5]中国大陆许可协议进行许可,我的博客欢迎复制共享,但在同时,希望保留我的署名权