题目链接:357. 统计各位数字都不同的数字个数
排列组合问题,$1$ 位以内的各位数字都不同的数字个数是 $10$,$n$($n \ge 2$) 位以内的各位数字都不同的数字个数 $N$ 按照如下公式计算:
\[N = 10 + \sum_{r=2}^{n}{C_9^{r}A_{r}^{r} + C_9^{r-1}A_{r-1}^{r-1}C_{r-1}^1}.\]import math
class Solution:
def countNumbersWithUniqueDigits(self, n: int) -> int:
if n == 0:
return 1
elif n == 1:
return 10
nCr = lambda n, r: math.factorial(n) // math.factorial(r) // math.factorial(n - r)
nAr = lambda n, r: math.factorial(n) // math.factorial(n - r + 1)
return sum(nCr(9, r) * nAr(r, r) + nCr(9, r - 1) * nAr(r - 1, r - 1) * (r - 1) for r in range(2, n + 1)) + 10