LeetCode 440 字典序的第K小数字[字典树] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 440 字典序的第K小数字[字典树] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
这是一道典型的字典树题目,但是却不需要构建字典树便能解决,这就需要在心中构建字典树,想象着如何在心中构建的字典树中寻找到第K小数字。首先从第一个节点开始(即1),统计该子树的节点个数直到超过n,这个时候,如果k在统计的个数之内,则说明目标数字在该子树中,从该子树的第二层继续重复相同的遍历,如果不在,则k在另一个子树中,往下一个子树进发。代码如下:
class Solution
public:
int findKthNumber(int n, int k)
// 初始化,已经访问了第一个点
int cur = 1;
k --;
while(k > 0)
long long count = 0, first = cur, last = cur + 1;
// 统计当前子树上所有节点
while(first <= n)
count += min((long long)n + 1, last) - first;
first *= 10;
last *= 10;
// 如果不在当前子树上
if(count <= k)
cur ++;
k -= count;
else
cur *= 10;
k --;
return cur;
;
以上是关于LeetCode 440 字典序的第K小数字[字典树] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
440. 字典序的第K小数字(困难)-字典树-数节点-字节跳动高频题
2022-02-05:字典序的第K小数字。 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。 注意:1 ≤ k ≤ n ≤ 10**9。 示例 : 输入: n: 13 k: 2
[LeetCode] K-th Smallest in Lexicographical Order 字典顺序的第K小数字
leetcode 31. Next Permutation(字典序的下一个)
LeetCode 230. 二叉搜索树中第K小的元素 / 476. 数字的补数 / 211. 添加与搜索单词 - 数据结构设计(字典树)