有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java查找大小大于或等于2的数组子集

下面的代码打印所有子集,但我需要大于或等于2的大小

public static void printSubsets(char set[])
{
    int n = set.length;

    for (int i = 0; i < (1<<n); i++)
    {
        System.out.print("{ ");

        for (int j = 0; j < n; j++)

            if ((i & (1 << j)) >0 )
                System.out.print(set[j] + " ");

        System.out.println("}");
    }
}

共 (1) 个答案

  1. # 1 楼答案

    大小为0的子集对应于i == 0。要消除空子集,请从i = 1开始

    大小为1的子集对应于正好有一个位集的i;或者,当它是2的幂时。一个正数^{} is a power of two如果(i & (i - 1)) == 0

    for (int i = 1; i < (1<<n); i++) {
        if ((i & (i - 1)) == 0) {
            continue;
        }
    
        System.out.print("{ ");
    
        for (int j = 0; j < n; j++) {
            if ((i & (1 << j)) != 0) {
                System.out.print(set[j] + " ");
            }
        }
    
        System.out.println("}");
    }
    

    或者,您可以保留原始循环,只需插入此支票:

    if (Integer.bitCount(i) < 2) {
        continue;
    }
    

    它没有那么聪明或高效,但它很好读