语言:python
1. 字符可重复
def perm(items, n=None):
if n is None:
n = 2
for i in range(len(items)):
v = items[i:i+1]
if n == 1:
yield v
else:
rest = items[:]
for p in perm(rest, n-1):
yield v + p
for i in perm("abcdef"):
print i,
输出结果为:
aa ab ac ad ae af ba bb bc bd be bf ca cb cc cd ce cf da db dc dd de df ea eb ec ed ee ef fa fb fc fd fe ff
2.字符不可重复
def perm(items, n=None):
if n is None:
n = 2
for i in range(len(items)):
v = items[i:i+1]
if n == 1:
yield v
else:
rest = items[:i] + items[i+1:]
for p in perm(rest, n-1):
yield v + p
for i in perm("abcdef"):
print i,
输出结果为:
ab ac ad ae af ba bc bd be bf ca cb cd ce cf da db dc de df ea eb ec ed ef fa fb fc fd fe
3.输出全排列
def perm(items, n=None):
if n is None:
n = len(items)
for i in range(len(items)):
v = items[i:i+1]
if n == 1:
yield v
else:
rest = items[:i] + items[i+1:]
for p in perm(rest, n-1):
yield v + p
for i in perm("abc"):
print i,
输出结果:
abc acb bac bca cab cba