问题
给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。
注意:1 ≤ k ≤ n ≤ 109。
解决
本身是10个十叉树问题
我们从上往下,从左到右,每次计算以该节点为根节点的子树的节点数,判断其与k的关系,比k小说明不在子树里,k减去子树节点数,向右,值+1;比k大说明在子树里,k-1,要向下,值就要*=10
class Solution(object):
def findKthNumber(self, n, k):
"""
:type n: int
:type k: int
:rtype: int
"""
res=1
k-=1
while k>0:
cnt,cur,next=0,res,res+1
while cur<=n:
cnt+=min(n+1,next)-cur
cur*=10
next*=10
if cnt<=k:
k-=cnt
res+=1
else:
k-=1
res*=10
return res