思考一个问题,字典序的话,我们构造一个数字时,前缀是pre那么,递增和拼接哪个更大?
举例示例里面的,前缀是1,递增是2,拼接(变成10,11),看来拼接是字典序更小的。
首先我们需要找到一个前缀下所有元素的个数,比如前缀是1,n=125,那么在这颗树下的个数一共有1+10+10+10+6(1,10....19,100...125)。
如果我们把这下面所有的节点加到排序里面,但是还未到达相应的序号,那就递增前缀,使其快速的变大;否则我们*10让其缓慢的变大。
class Solution:
def findKthNumber(self, n: int, k: int) -> int:
def getCount(prefix,maxn):
cur=prefix
nextn=prefix+1
count=0
while cur<=maxn:
count+=min(maxn+1,nextn)-cur
cur,nextn=cur*10,nextn*10
return count
p=prefix=1
while p<k:
cnt=getCount(prefix,n)
if p+cnt>k:
prefix*=10
p+=1
else:
prefix+=1
p+=cnt
return prefix