arrays - 给定一个整数为 0 到 N 的数组,有多少种排列方式使得 array[i] 不能是 i

标签 arrays algorithm combinations permutation

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

例如,N = 2

以下安排有效:

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

因此,答案是2种安排

我想不出在 O(1) 时间内完成此操作的非蛮力方法,有人可以帮我吗?

最佳答案

这种排列称为紊乱Wiki page包含很多计算它们的公式。例如,重复:

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

其中 !n,称为子因子,表示紊乱的数量,起始值为 !0 = 1!1 = 0

关于arrays - 给定一个整数为 0 到 N 的数组,有多少种排列方式使得 array[i] 不能是 i,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51291851/

相关文章:

python - 如何将字节数组的内容复制到列表 (Python)?

arrays - 尝试将 firebase 字符串值 append 到 Collection View

algorithm - 计算列表列表中的元素数量

algorithm - 如何计算一组角度的中值?

java - 使用列表子集的组合生成列表,Java

PHP 按日期排序数组?

javascript - 检查数组javascript中值是否存在两次

基于事件结果 0/1 跟踪总变化的 Pythonic 方式

python - 有没有办法获得一组元组的组合?

R:如何计算可能的列组合的总和