Skip to content

Commit cf01290

Browse files
authored
Create sum-of-k-mirror-numbers.py
1 parent ea9ded9 commit cf01290

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

Python/sum-of-k-mirror-numbers.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# Time: O(10^6), the most times of finding x is 665502 (k = 7, n = 30)
2+
# Space: O(1)
3+
4+
class Solution(object):
5+
def kMirror(self, k, n):
6+
"""
7+
:type k: int
8+
:type n: int
9+
:rtype: int
10+
"""
11+
def get_mirror(n, base, even):
12+
result = n
13+
if not even:
14+
n //= base
15+
while n:
16+
result = result*base+n%base
17+
n //= base
18+
return result
19+
20+
def reverse(n, base):
21+
result = 0
22+
while n:
23+
result = result*base+n%base
24+
n = n//base
25+
return result
26+
27+
result = 0
28+
base1, base2 = k, 10 # (10, k) is slower
29+
prefix_num, cnt, total = [1]*2, [0]*2, [base1-1]*2
30+
even = False
31+
for _ in xrange(n):
32+
while True:
33+
x = get_mirror(prefix_num[even], base1, even)
34+
prefix_num[even] += 1
35+
cnt[even] += 1
36+
if cnt[even] == total[even]:
37+
cnt[even] = 0
38+
total[even] *= base1
39+
even = not even
40+
if x == reverse(x, base2):
41+
break
42+
result += x
43+
return result
44+
45+
46+
# Time: O(10^6), the most times of finding x is 665502 (k = 7, n = 30)
47+
# Space: O(1)
48+
class Solution2(object):
49+
def kMirror(self, k, n):
50+
"""
51+
:type k: int
52+
:type n: int
53+
:rtype: int
54+
"""
55+
def num_gen(k):
56+
digits = ['0']
57+
while True:
58+
for i in xrange(len(digits)//2, len(digits)):
59+
if int(digits[i])+1 < k:
60+
digits[i] = digits[-1-i] = str(int(digits[i])+1)
61+
break
62+
digits[i] = digits[-1-i] = '0'
63+
else:
64+
digits.insert(0, '1')
65+
digits[-1] = '1'
66+
yield "".join(digits)
67+
68+
def mirror_num(gen):
69+
while True:
70+
x = int(next(gen, k), k)
71+
if str(x) == str(x)[::-1]:
72+
break
73+
return x
74+
75+
gen = num_gen(k)
76+
return sum(mirror_num(gen) for _ in xrange(n))

0 commit comments

Comments
 (0)