class Solution:
def countSpecialNumbers(self, n: int) -> int:
s = str(n)
@functools.lru_cache(maxsize=None)
def f(i: int, mask: int, is_limit:bool, is_num:bool) -> int:
if i == len(s):
return int(is_num)
res = 0
if not is_num:
res = f(i+1, mask, False, False)
up = int(s[i]) if is_limit else 9
for d in range(1-int(is_num),up+1):
if mask >>d & 1==0:
res += f(i+1, mask|(1<<d), is_limit and d==up, True)
return res
return f(0,0,True,False)
12-06
427
01-16
646
09-20
713
03-20
368
08-16
1035
09-29
142