按字典序排列1~n的数字字符串,找到第k个是什么数字
- 把所有的数字看作是在一个字典树上,每个结点最多有10个子节点
- 一个个结点搜索,可以预先计算出这个结点所有子节点的数目,并加起来与k作比较,还不够则搜索下一个兄弟结点,否则就遍历到子节点继续计算子节点数量。
- prefix记录的是当前从根节点到当前结点的路径,prefix+1则是下一个兄弟结点的路径。
- 以样例输入为例。例如计算1的子节点数,那么先计算1~2之间的个数(1个),然后计算10~20之间的个数(4个)。。。
- 若prefix的子节点数量超过了还需要的数量,那么搜索prefix的第一个子节点,即prefix*10 与 prefix*10 + 1
C++ Code
1 | class Solution { |