每个字母都要用一次,相同字母互换不算新排列,所以答案是多项式系数 c1!c2!⋯c26!n!。其中 n=∣s∣,ci 是第 i 个字母的出现次数。n≤20 时 n! 还在 64 位有符号整数里,但先把 n! 算出来再连除,中间会把整除顺序写乱,也容易在别的语言里溢出思维上出错。这里按字母把每个 ci! 的因子边乘边除:一共乘 n 次,每乘进一个新的位置编号,就立刻除掉这个字母内部的一个序号。每一步都能整除。
给定一个只含小写字母的字符串 s,把其中每个字母都恰好用一次,问能排出多少种不同的字符串。相同字母互换位置不算新的排列,重复的结果只算一次。
一行字符串 s。
1≤∣s∣≤20,s 只含小写字母。答案不超过 20!,可以用 64 位有符号整数装下。
输出一个整数,表示不同排列的个数。
输入
aab
输出
3
说明
三个字母里 a 出现 2 次,b 出现 1 次。不同排列是 aab、aba、baa,个数是 2!3!=3。
输入
abc
输出
6
说明
三个字母互不相同,排列数是 3!=6。
输入
aaa
输出
1
说明
三个字母完全相同,怎么排都是 aaa,只有 1 种。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册