1、数学知识温习
全排列的公式为:
A n m ; A _n^m ; Anm;
以 " AABBCC ” 为例,全排列的公式有:
A 6 6 = 6 ! ; A _6^6 = 6! ; A66=6!;
重复的字母为 “ ABC ” ,各重复2个,故重复的次数为:
A 2 2 ∗ A 2 2 ∗ A 2 2 ; A _2^2 * A _2^2 * A _2^2 ; A22∗A22∗A22;
所以,所有不同的排列数有:
S n = A 6 6 A 2 2 ∗ A 2 2 ∗ A 2 2 = 720 8 = 90 ; S _n = \frac{A _6^6 }{A _2^2 * A _2^2 * A _2^2} = \frac{720 }{8} =90; Sn=A22∗A22∗A22A66=8720=90;
2、python使用递归法求所有的重排列项次和数目
# 传入需要排列的字符串,返回字符串所有的排列列表,包含重复的,使用递归法
def di_gui(str1):if len(str1) <= 1:return str1list1 = []for i in range(len(str1)):for j in di_gui(str1[0:i] + str1[i+1:]):list1.append(str1[i] + j)return list1# 列表去重===========
def qu_chong(l1):l2 = []for i in l1:if i not in l2:l2.append(i)return l2if __name__ == '__main__':str1 = "AABBCC"list1 = di_gui(str1)print(len(list1), list1) # 输出全排列的列表个数和项次,包含重复的~list2 = qu_chong(list1) # 去重print(len(list2), list2) # 输出全排列的列表个数和项次,不包含重复的~
输出的结果为:
3、Python使用数学公式计算全排列项次,不能输出有哪些项次,只能算出总数
from collections import Counter # 导入计数模块
from math import factorial # 导入阶乘模块if __name__ == '__main__':str1 = "AABBCC"a = 1num1 = Counter(str1)print(num1)for i in num1.values():a *= factorial(i)print(factorial(len(str1)))print(a)print("阶乘结果:", factorial(len(str1))//a)
输出的结果为: