You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求N位数字的不同数位排列数算法(N≤18)

含重复数位的数字排列数计算方法

核心公式

当数字里存在重复数位时,不同排列的总数用以下公式计算:
总排列数 = N! / (k₁! × k₂! × ... × kₘ!)
参数说明:

  • N 是数字的总位数
  • k₁, k₂, ..., kₘ 是每个重复数位的出现次数(仅统计出现次数≥2的数位即可,因为1!等于1,乘入后不影响结果)

实际例子

举两个直观的例子:

  • 你提到的214:所有数位无重复,每个数位出现1次,分母为1!×1!×1! = 1,结果为3! / 1 = 6,和预期一致。
  • 再比如数字1122:总位数N=4,1出现2次,2出现2次,分母是2!×2! = 2×2=4,总排列数为4! /4 = 24/4=6,对应的排列是1122、1212、1221、2112、2121、2211。

具体实现步骤

  1. 统计数位出现次数:将数字拆分为单个数位,统计0-9每个数字的出现频次。
  2. 计算总阶乘:算出N的阶乘(N≤18时,18!为6402373705728000,64位整数可容纳,Python无需担心溢出问题)。
  3. 计算分母乘积:对每个出现次数大于1的数位,计算其出现次数的阶乘,再将所有这些阶乘相乘。
  4. 得出结果:用总阶乘除以分母乘积,得到不同排列的数量。

特殊情况处理

如果题目要求排列后的数必须是合法N位数(不能以0开头),需额外调整:

  • 先按公式算出包含前导零的所有排列数
  • 计算以0开头的非法排列数:将0固定在第一位,剩余N-1位用同样公式计算排列数
  • 最终合法排列数 = 总排列数 - 非法排列数

内容的提问来源于stack exchange,提问作者K123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:23:12