查找集合的子集
前一段时间,我们离散老师让用代码写找集合的所有子集,代码如下
public class TTTT1 {
public static void main(String[] args) {
int[] t = {1,2,3,4,5};
int tt = (int)Math.pow(2, t.length);//算出t的子集的总个数
for(int i=0 ; i <tt; i++) {
int a = 1;
System.out.print("{ ");
for(int j = 0 ; j < t.length ; j++) {
if((i & a) != 0) {
System.out.print(t[j] + " ");
}
a = a << 1;
}
System.out.print("}");
System.out.println();
}
}
}
首先我随意定义了一个有5个元素的集合,用 Math.pow(a,b)算出这个集合的子集的个数。
第一个for循环将所有的子集全部输出,用第二个for循环控制位运算,将其二进制码的和运算的结果为1 的位数对应的元素输出。
例如当i=1时
然后将a=1换为二进制数为 00001
将其进行二进制的和运算无论当1放在和运算的哪一个上面,它与00001的和运算只有第一个不为0,所以输出数组中的第一个元素。以此类推。