📌  相关文章
📜  查找Java给定集合的所有子集

📅  最后修改于: 2021-04-27 06:05:18             🧑  作者: Mango

问题:找到给定集合的所有子集。

Input: 
S = {a, b, c, d}
Output:
{}, {a} , {b}, {c}, {d}, {a,b}, {a,c},
{a,d}, {b,c}, {b,d}, {c,d}, {a,b,c}, 
{a,b,d}, {a,c,d}, {b,c,d}, {a,b,c,d}

任何给定集合的子集总数等于2 ^(集合中元素的数量)。如果我们仔细地注意到,它不过是从0到15的二进制数,可以显示如下:

0000 {}
0001 {a}
0010 {b}
0011 {a, b}
0100 {c}
0101 {a, c}
0110 {b, c}
0111 {a, b, c}
1000 {d}
1001 {a, d}
1010 {b, d}
1011 {a, b, d}
1100 {c, d}
1101 {a, c, d}
1110 {b, c, d}
1111 {a, b, c, d}

从右开始,第i个位置的1表示该集合的第i个元素以0表示存在,表示该元素不存在。因此,我们要做的只是生成从0到2 ^ n – 1的二进制数,其中n是集合的长度或集合中元素的数目。

// A Java program to print all subsets of a set
import java.io.IOException;
  
class Main
{
    // Print all subsets of given set[]
    static void printSubsets(char set[])
    {
        int n = set.length;
  
        // Run a loop for printing all 2^n
        // subsets one by one
        for (int i = 0; i < (1< 0)
                    System.out.print(set[j] + " ");
  
            System.out.println("}");
        }
    }
  
    // Driver code
    public static void main(String[] args)
    {
        char set[] = {'a', 'b', 'c'};
        printSubsets(set);
    }
}

输出:

{ }
{ a }
{ b }
{ a b }
{ c }
{ a c }
{ b c }
{ a b c }

相关文章:
在C / C++中查找集合的所有子集