输出集合的子集---二进制法

来源:互联网 发布:mac adobe设置中文版 编辑:程序博客网 时间:2024/04/28 23:52

最近笔试面试宣讲会也是跑得焦头烂额,心桑就对 = = 

不记下来很快就忘,第一次写技术博客,希望能一直坚持下去,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();}}}


0 0
原创粉丝点击