算法学习笔记
# 字符串排列组合实现原理
# A(n, n)
def permations(string: str):
if len(string) <= 1:
return [string]
else:
output_list = []
for i in range(len(string)):
for j in permations(string[0:i] + string[i + 1:]):
output_list.append(string[i] + j)
return output_list
# A(n, k)
def permation(n: str, k: int):
if len(n) <= 1:
return [n]
else:
output_list = []
for i in range(len(n)):
for j in permation(n[0:i] + n[i + 1:], k):
output_list.append(n[i] + j[:k - 1])
return sorted(list(set(output_list)))
# C(n, k)
def combinations(func, *args, **kwargs):
l_o = []
temp = map(lambda x: ''.join(sorted(x)), func(*args, **kwargs))
for i in temp:
if i not in l_o:
l_o.append(i)
return l_o
if __name__ == '__main__':
print(len(permations('12345')), permations('12345'))
print(len(permation('12345', 3)), permation('12345', 3))
print(len(combinations(permation, '12345', 3)), combinations(permation, '12345', 3))
简单粗暴得出答案
from math import perm, comb
from itertools import permutations, combinations
# perm 和 comb 只返回计算结果
# Evaluates to n! / (n - k)! when k <= n and evaluates to zero when k > n.
print(perm(5))
print(perm(5, 3))
# Evaluates to n! / (k! * (n - k)!) when k <= n and evaluates to zero when k > n.
print(comb(5, 3))
list1 = []
list2 = []
# print(permutations('abcd')) # <itertools.permutations object at 0x000001CF40EBFF10>
# print(combinations('abcd', 3)) # <itertools.combinations object at 0x000001486708FF10>
for i in permutations('abcd'):
list1.append(i)
for j in combinations('abcd', 3):
list2.append(j)
print(list1)
print(list2)