获取数组子序列

 /**
     * 位对应法
     *
     * @param array
     */
    public void place(int[] array) {
        //获取数据长度 那么对应的就是二进制字节位数1存在 0不存在  假设长度为4
        //一位子序列的情况有 1000  0100  0010 0001
        //二位子序列情况有 1100  1010  1001 0110 0101 0011
        //三位子序列情况 1110 1011 1101 0111
        //四位子序列情况 1111
        //空子序列 0000
        int length = array.length;
        //二进制的可能情况数量为1向左移动数组长度位数,为什么呢?因为总共是3位
        // 每一个存在不存在两种可能 所以就是2的4次方种情况
        int end = 1 << length;
        int mark = 0;//标记
        //打印出每一种情况的子序列
        for (mark = 0; mark < end; mark++) {
            boolean isNUll = true;
            //遍历都不存在就是空子集
            for (int i = 0; i < length; i++) {
                if ((1 << i & mark) != 0) {//!=0存在 =0不存在
                    isNUll = false;
                    System.out.print(array[i] + ",");
                }
            }
            if (isNUll) {
                System.out.print("null");
            }
            System.out.println();
        }
    }

外循环先确定一位,内循环遍历数组

posted @ 2022-03-21 15:10  紫英626  阅读(57)  评论(0编辑  收藏  举报

紫英