问题:找到给定集合的所有子集。
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++中查找集合的所有子集