Numbers With Repeated Digits LeetCode solution in Python

1
class Solution:
2
def numDupDigitsAtMostN(self, n: int) -> int:
3

4
nums = [int(i) for i in str(n + 1)] # digits in n+1
5
d = len(nums) # number of digits in n+1
6
res = 0 # number of no duplicates
7

8
# count no duplicates for numbers with <d digits
9
for i in range(1, d):
10
res += 9 * math.perm(9, i - 1)
11

12
# count no duplicates for numbers with d digits and smaller than n
13
for i, x in enumerate(nums):
14
if i == 0:
15
digit_range = range(1, x) # first digit can not be 0
16
else:
17
digit_range = range(x)
18

19
for y in digit_range:
20
if y not in nums[:i]:
21
res += math.perm(9 - i, d - 1 - i)
22
if x in nums[:i]:
23
break
24

25
return n - res

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0