440. 字典序的第K小数字
注意数字越界。
十叉树的前序遍历问题。
十叉树的节点值:1的孩子有10,11.....19,10的孩子有100,101,102...109。
cur指向当前节点值。
高效办法是,计算以cur为根的子树的节点个数,就可以知道往右走还是往子树走了。
计算节点值的方法是按层计算。
class Solution {
public int findKthNumber(int n, int k) {
k--;
long cur=1;
long next=cur+1;
while(k>0){
int count=0;
long left=cur;
long right=next;
while(left<=n){//计算以left为前缀的子树的节点个数
count+=Math.min(n+1,right)-left;
left*=10;
right*=10;
}
if(k-count>=0){
k=k-count;
cur=next;
next=cur+1;
}
else{
k--;
cur=cur*10;
next=cur+1;
}
}
return (int)cur;
}
}