【问题标题】:find all subsets of array having subset of size greater than or equal to 2查找大小大于或等于 2 的数组的所有子集
【发布时间】:2018-05-15 10:29:46
【问题描述】:

以下代码打印所有子集,但我需要大小大于或等于 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("}");
    }
}

【问题讨论】:

    标签: java algorithm bit-manipulation


    【解决方案1】:

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

    大小为 1 的子集对应于 i 恰好设置了一个位;或者,等效地,当它是 2 的幂时。如果是 (i &amp; (i - 1)) == 0,则为正数 i is a power of two

    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;
    }
    

    它没有那么聪明或高效,但它很好并且可读。

    【讨论】:

      猜你喜欢
      • 2019-09-26
      • 2014-07-19
      • 2021-06-04
      • 2011-09-03
      • 2014-12-20
      • 2011-01-25
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多