from functools import cache number = 18890101 s = str(number)
@cache deff(i, mask, is_limit, is_number): """ :param i: 数字字符串 s 的下标 :param mask: 记录已填数字(用于构造特殊整数) :param is_limit: 前面填的数字是否都对应 number 上面的 :param is_number: 前面是否填入了数字 :return: 符合规则的整数个数 """ if i islen(s): returnint(is_number) ret = 0 ifnot is_number: ret += f(i + 1, mask, False, False) up = int(s[i]) if is_limit else9 for d inrange(1 - int(is_number), up + 1): if mask >> d & 1 == 0: ret += f(i + 1, mask | (1 << d), is_limit and d is up, True) return ret