题目链接: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