Java实现求子集(亲测有效)

字符串版本

/**
     * 获取一个字符串中所有的非空真子集
     *
     * @param set 需要获取子集的项
     * @return list
     * 思路:如果集合S(A,B,C,D)。其大小为4。拥有2的4次方个子集,即0-15,二进制表示为0000,0001。...,1111。
     * 相应的子集为空集。{D},...。{A,B,C,D}。
     */
public static void getSub() {
    
    
        String set = "BCE";
        char[] charArray = set.toCharArray();
        for (int i = 1; i < (int) Math.pow(2, set.length()) - 1; i++) {
    
    
            String s = Integer.toBinaryString(i);
            StringBuilder buffer = new StringBuilder(s);
            for (int j = 0; j < set.length() - s.length(); j++) {
    
    
                buffer.insert(0, "0");
            }
            String string = buffer.toString();
            char[] chars = string.toCharArray();
            for (int k = 0; k < chars.length; k++) {
    
    
                if (chars[k] == '1') {
    
    
                    System.out.print(charArray[k]);
                }
            }
            System.out.print("\n");
        }
    }

测试

在这里插入图片描述
在这里插入图片描述

集合版本

    public static List<String> getSubset(String set) {
    
    
        char[] charArray = set.toCharArray();
        List<String> list = new ArrayList<>();
        for (int i = 1; i < (int) Math.pow(2, set.length()) - 1; i++) {
    
    
            String s = Integer.toBinaryString(i);
            StringBuilder buffer = new StringBuilder(s);
            StringBuilder sets = new StringBuilder();
            for (int j = 0; j < set.length() - s.length(); j++) {
    
    
                buffer.insert(0, "0");
            }
            String string = buffer.toString();
            char[] chars = string.toCharArray();
            for (int k = 0; k < chars.length; k++) {
    
    
                if (chars[k] == '1') {
    
    
                    sets.append(charArray[k]);
                }
            }
            list.add(sets.toString());
        }
//        for (int ik = 0; ik < list.size(); ik++) {
    
    
//            System.out.print(list.get(ik)+"  ");
//        }
        return list;
    }

有需要联系 QQ:2248557717

猜你喜欢

转载自blog.csdn.net/dwjdj/article/details/109158688