Advertisement

生成英文字母的所有子集——Python代码实现

阅读量:

题目:存在一个由A-Z这26个英文字母构成的集合,要求使用C/C++语言编写程序,输出该集合的所有子集,每个子集单独占一行,并且不得采用递归方式实现。

分析:该问题可参考《编程之法:面试和算法心得》一书中的相关论述。对于26个大写字母而言,初看似乎难以找到明确的解决思路。以三个字母ABC为例,其所有子集包括:

{}
A
B
C
AB
AC
BC
ABC

若将ABC视为三个二进制位,则可表示为:

000
100
010
001
110
101
011
111

对上述二进制数值进行排序后得到如下序列:

000
001
010
011
100

通过观察可以发现,这些数值的范围是从零到2(3-1)。每一个二进制位上的值为非零时,代表对应的字母被包含在当前子集中。同理,对于26个字母的情况,只需遍历从零到2(26-1)之间的所有整数,并检查每一位是否为一即可生成所有可能的子集。

python代码:

复制代码
    def pl(str_list, n):
    for i in range(1, 1 

全部评论 (0)

还没有任何评论哟~