Algorithm 唯一排列-有例外
我刚做了个测验,有个问题是我强逼的。。。但我确信有一个“数学”公式可以“解决”它 字符串的排列 假设你有一个字符串“abcdef”。。。计算字符串的所有唯一排列。对于具有所有唯一选项的字符串,这很简单:长度因子。那么6!=720个独特的组合 唯一排列 现在,当您添加重复项时。。。取factoral,按唯一字母的乘积进行划分:“aaabb”=>6!/(3!*3!)=>720/36=>20种独特的组合 带有排除项的唯一排列 让我难堪的是: 您有一个字符串,可能有重复的数据。。。除了现在,请排除以空格(或圆点,用于可见性)开头的排列: 我的解决方案 我的解决方案-暴力-是创建排列。。。并手动排除那些以空格开头的。。。如果我没记错的话 我知道它与因子数和空格数有关。但最终的答案我想不起来Algorithm 唯一排列-有例外,algorithm,permutation,Algorithm,Permutation,我刚做了个测验,有个问题是我强逼的。。。但我确信有一个“数学”公式可以“解决”它 字符串的排列 假设你有一个字符串“abcdef”。。。计算字符串的所有唯一排列。对于具有所有唯一选项的字符串,这很简单:长度因子。那么6!=720个独特的组合 唯一排列 现在,当您添加重复项时。。。取factoral,按唯一字母的乘积进行划分:“aaabb”=>6!/(3!*3!)=>720/36=>20种独特的组合 带有排除项的唯一排列 让我难堪的是: 您有一个字符串,可能有重复的数据。。。除了现在,请排除以空格
我应该可以计算长度除以计数。。。然后计算以空格开头的不同数字并减去它。将第一个字符作为单独的大小写进行分区:该字符的选择较少。这将更改计算分子的第一个因子。例如,
aa.bb.cc
对于第一个字符只有6个选项,而不是8个。因此,计算结果是:
8! / (2! 2! 2! 2!) -- four duplicates
现在是
(6 * 7!) / (2! 2! 2! 2!) -- we still have four duplicates
假设你有5个独特的字母 那你就有5个了!组合 现在当你有5个独特的字母表和一个,然后 在第一个位置,您将放置这5个字母中的一个。然后,你将把剩下的(4个字母和1个)放在5中!方式, 结果是5*5 因此,我认为答案应该是 假设在所有和z空间中都有x个唯一字母,y个字母 所以答案应该是
y*(y+z-1)!/(
寻找重复的字母表和空格组合
)只需减去第一个字符固定为“.”时的排列数即可(使用相同的逻辑,可以通过查看删除一个点后字符串的排列数来计算)假设x唯一、y字符和z空格。。。。y*(y+z-1)!/(…)
-我假设有什么东西坏了。。。方程中没有X。。。我不认为它像贴出来的那样有效。你不需要方程@WernerCD中的X,引用你问题中的例子,`现在唯一的置换,当你添加重复项时。。。取factoral,按唯一字母的乘积进行划分:“aaabb”=>6!/(3!*3!)=>720/36=>20种独特的组合`
(6 * 7!) / (2! 2! 2! 2!) -- we still have four duplicates