OD 算法题 B卷【全排列】
文章目录
- 全排列
全排列
- 给定一个只包含大写英文字母的字符串S,要求你给出对S重新排列的所有不同的排列数;
- 如ABA,则不同的排列有ABA、AAB、BAA三种;
- 时间限制5s,内存限制100M
输入描述:
输入一个长度不超过10的字符串S,字母都为大写;
输出描述:
输出S重新排列的所有不同的排列数(含自身)
示例1
输入:
ABA
输出:
3
示例2
输入:
ABCDEFGHHA
输出:
907200
python实现:
- 计算全排列数,依次除以每个重复字符个数的阶乘;
def calc_factorial(n):""" 计算n的阶乘 """if n in [1, 0]:return 1return n * calc_factorial(n-1)s_str = input().strip()
n = len(s_str)
# 计算A_n_1 * ..... n的阶乘
total_num = calc_factorial(n)# 统计每个字符的个数
char_count = {}
for c in s_str:if c in char_count:char_count[c] += 1else:char_count[c] = 1# 总的全排列数 除以 (每个)重复字符个数的阶乘
for v in char_count.values():if v > 1:total_num /= calc_factorial(v)print(int(total_num))