题目
给定一个只包含大写英文字母的字符串S,要求你给出对S重新排列的所有不相同的排列数。
如:S为ABA,则不同的排列有ABA、AAB、BAA三种。
function helper(s) {
const res = [];
let sum = 1;
let j = 0;
for (let val of s) {
j++;
sum *= j; // 处理阶乘
if (!res[val]) {
res[val] = 1;
} else {
res[val]++;
}
sum /= res[val]; // 去重
}
return sum;
}
console.log(helper('ABAAC'));
- 总结: 太蠢了,只知道递归求阶乘,连基本的循环都忘了!!!
- 核心思想: 阶乘数 / 重复的次数(感谢南研所的面试官,求过吧!!)