假设我们有以下整数集合:{1,1,2}。我们可以用3种可能的方式来安排这个集合的顺序:
1,1,2
1,2,1
2,1,1
一般情况下,我们如何计算可以排列整数集合的方式的数量?假设集合的大小非常大(在最坏的情况下是10^5),但是答案总是足够小,可以放入一个长的集合中。这个问题是否存在有效的解决方案,如果存在,如何在Java中实现它?
发布于 2015-02-03 03:24:31
假设您有n个整数,它们是由整数x_i的n_i副本构成的。
要计算出排列的数量,只需计算
t = n!但是,由于您并不关心具有相同值的数字是如何排列的,因此对于i的每个值,将总数减去:
t = t / n_i!在您的例子中,您有3个整数,其中1个是2的副本,2个是1的副本。
您可以计算:
t = 3! = 6
t = t/1! = 6/1 = 6
t = t/2! = 6/2 = 3所以答案是3。
发布于 2015-02-03 05:27:39
一般情况下,我们如何计算排列整数集合的方式的数量?
循环遍历集合,计算每个数字在集合中出现的次数。
排列数的公式是size factorial / number of duplicate integers factorial。在您的示例1,1,2中,大小为3,重复整数的数量为2。
3!/ 2!=3*2*1/2*1= 3;
另一种更加计算机友好的计算3!/ 2的方法!就是先把2的阶乘除以,剩下3。
如果集合没有重复的整数,则排列的数量为size factorial。
https://stackoverflow.com/questions/28285150
复制相似问题