题目

如:

有字符a, b, c, d

求它们的任意种组合:

得到结果:

a,b,c,d,ab,ac,ad,bc,bd,cd,bcd,acd,abd,abc,abcd

python实现:

import math
# 分组列
group = ['a', 'b', 'c', 'd']
le = len(group)
all_num = int(math.pow(2, le)-1)
print('一共有 %d 种分组' % all_num)
for i in range(1, all_num+1):
tl = ''
binary = bin(i).replace('0b', '')
bi = binary.rjust(le, '0')
for j in range(0, le):
if bi[j] == '1':
tl += group[j]
print(tl)

运行结果:

d
c
cd
b
bd
bc
bcd
a
ad
ac
acd
ab
abd
abc
abcd

分析

n 个字符就是 2 n − 1 2^n -1 2n−1 种组合:

如 a,b,c,d就是15种组合:

从1~15对应的二进制分别为:

0001  对应的就是 d
0010 对应的就是 c
0011 对应的就是 cd
0100 对应的就是 b
...
1111 对应的就是 abcd

按照这种思路就全部列出来了。