aboutsummaryrefslogtreecommitdiff
path: root/kth_smallest_lexicographical.py
blob: 8f56678cce441b8d1caf9dec8b8669583d04a6c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 440. K-th Smallest in Lexicographical Order

"""
given two integers 'n' and 'k', return the k'th lexicographically smallest
integer
"""


class Solution(object):
    def findKthNumber(self, n, k):
        """
        :type n: int
        :type k: int
        :rtype: int
        """
        curr = 1
        k -= 1
        while k > 0:
            cnt = 0
            interval = [curr, curr + 1]
            while interval[0] <= n:
                cnt += min(n + 1, interval[1]) - interval[0]
                interval = [10 * interval[0], 10 * interval[1]]
            if k >= cnt:
                curr += 1
                k -= cnt
            else:
                curr *= 10
                k -= 1
        return curr


if __name__ == "__main__":
    obj = Solution()
    print(obj.findKthNumber(13, 2))
    print(obj.findKthNumber(1, 1))