357. 统计各位数字都不同的数字个数

exiaohu 于 2022-04-11 发布

题目链接: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