最近笔试面试宣讲会也是跑得焦头烂额,心桑就对 = =
不记下来很快就忘,第一次写技术博客,希望能一直坚持下去,go~
一个集合有2^n个子集,包括空集和全集。
一个数组如{1, 2, 3, 4},可以通过和数字的二进制形式取交集打印出它的全部子集。1等价于(0001)则打印出{1}(从右往左则打印{4}), 3等价于(0011)则打印出{1, 2} (或者{4, 3})。
代码如下:
public class Subset {
public static void main(String[] args) {
int[] arr = {1, 3, 2, 4, 5};
printSet(arr);
}
public static void printSet(int[] arr) {
//一共有2^n(n即数组大小)个子集
for (int i=0; i < (1<<arr.length); i++) {
//遍历二进制数的每一位,若该位为1则对应数组该位置的数在这个子集合中
for (int j=0; j<arr.length; j++) {
if (((i>>j) & 1) != 0) {
System.out.print(arr[j] + " ");
}
}
System.out.println();
}
}
}