给定一个整数从0到N的数组,有多少种方式可以使array [i]不能为i

时间:2018-07-11 18:09:47

标签: arrays algorithm combinations permutation

给出一个从0到N的整数的数组,有多少种排列方式,使得在数组的位置i上不能插入i?

例如,N = 2

以下安排有效:

  
      
  • 1,2,0
  •   
  • 2,0,1
  •   

因此,答案是2种安排

我想不出一种非蛮力方法在O(1)时间内做到这一点,有人可以帮我吗?

1 个答案:

答案 0 :(得分:7)

这种排列方式称为排列Wiki page包含许多公式来对其进行计数。例如,重复发生:

!n=(n-1)(!(n-1)+!(n-2))

其中!n(称为子因子)代表排列的次数,起始值为!0 = 1!1 = 0