"""
给定一个非负整数 n，计算各位数字都不同的数字 x 的个数，其中 0 ≤ x < 10n 。

示例:

输入: 2
输出: 91
解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外，在 [0,100) 区间内的所有数字。
通过次数17,913提交次数34,655

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/count-numbers-with-unique-digits
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
"""

from typing import *


class Solution:
    def dfs(self, n: int, pre: List[int]) -> int:
        if len(pre) == n:
            return 1
        rtn = 0
        for i in range(0, 10):
            if i not in pre:
                rtn += self.dfs(n, pre + [i])
        return rtn

    def countNumbersWithUniqueDigits(self, n: int) -> int:
        if n == 0:
            return 1

        rtn = 10
        for x in range(2, min(n + 1, 11)):
            for first in range(1, 10):
                rtn += self.dfs(x, [first])
        return rtn


if __name__ == '__main__':
    s = Solution()
    print(s.countNumbersWithUniqueDigits(5))
