给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。
1 ≤ k ≤ n ≤ 109。
n=10时,字典序:1,10,2,3,4,5,6.。。
可以把这n个数字看成字典树,那么每一个前缀都代表一个数字,其中每个节点有10个儿子,0~9.那么字典树的先序遍历的第k个就是答案。所以得到了一个O(k)的做法。
这类问题通常通过逐位判断答案的前缀来求解。
那么考虑当前已经求得答案的一个前缀为ans以及还需要遍历的节点个数k,那么对于要选择那个子节点其实就是从0~9找到第一个前缀字数和>=k的位置。
class Solution {
typedef long long ll;
public:
int findKthNumber(int n