二进制即0,1的组合,我们可以用0,1来分别表示集合的某一个元素到底存不存在一个集合中。
例如:假设S={“A”,"B","C"}
111(7)->A B C
110(6)->A B
101(5)->A C
100(4)->A
011(3)->B C
010(2)->B
001(1)->C
000(0)->NULL
代码实现如下:
package lintcode;
public class HandleAllSubSet {
public void handleAllSubSet(String[] set){
int len = set.length;
int val =0;
//根据字符串的长度,产生跟长度相同的二进制数 比如 长度是3,则val=111=7
for(int i = 0 ;i<len;i++)
{
val |= (1<<i);
}
while(val>0){
printSetByBinary(val,set);
val--;
}
}
/**
* 根据二进制位的描述输出想象的子集 例如 val=1 set = {"c"}
* @param val
* @param set
*/
p