440. 字典序的第K小数字

exiaohu 于 2022-03-23 发布

题目链接:440. 字典序的第K小数字

朴素解法,排序,然后取第 $k$ 个数即可。

进阶解法,使用前缀,计算每个前缀下面的数的数目。

class Solution:
    def findKthNumber(self, n: int, k: int) -> int:
        def get_count(prefix: int, n: int) -> int:
            count = 0
            cur, nxt = prefix, prefix + 1
            while cur <= n:
                count += min(nxt, n + 1) - cur
                nxt *= 10
                cur *= 10
            return count

        p, prefix = 1, 1
        while p < k:
            count = get_count(prefix, n)
            if p + count > k:
                prefix *= 10
                p += 1
            else:
                prefix += 1
                p += count
        return prefix