Skip to content

Commit f33c021

Browse files
authored
Create count-special-integers.py
1 parent e31bb2b commit f33c021

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

Python/count-special-integers.py

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Time: O(logn)
2+
# Space: O(logn)
3+
4+
# combinatorics
5+
class Solution(object):
6+
def countSpecialNumbers(self, n):
7+
"""
8+
:type n: int
9+
:rtype: int
10+
"""
11+
def P(m, n):
12+
result = 1
13+
for _ in xrange(n):
14+
result *= m
15+
m -= 1
16+
return result
17+
18+
digits = map(int, str(n+1))
19+
result = sum(P(9, 1)*P(9, i-1) for i in xrange(1, len(digits)))
20+
lookup = set()
21+
for i, x in enumerate(digits):
22+
for y in xrange(int(i == 0), x):
23+
if y in lookup:
24+
continue
25+
result += P(9-i, len(digits)-i-1)
26+
if x in lookup:
27+
break
28+
lookup.add(x)
29+
return result

0 commit comments

Comments
 (0)