leetcode困难440字典序的第K小数字
Posted qq_40707462
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode困难440字典序的第K小数字相关的知识,希望对你有一定的参考价值。
思路:十叉树
1、初始化前缀为1,计算以1开头的节点树的所有子树结点个数,如果小于k,那么根节点往右走(说明当前子树的结点树不够);如果大于k,那么根节点往下走,×10(说明答案就在当前根节点的子树结点)
2、减去已遍历过的结点数之后,可以直接将当前结点看成新的根节点,一直重复这两步的操作,直到k = 0,找到答案。
3、获得当前节点下的所有节点个数(最后一层可能不满):
Math.min (n+1 - prefix , nextPrefix - prefix)
class Solution
public int findKthNumber(int n, int k)
long cur=1;
k-=1;
while(k>0)
int node=getNode(n,cur);
if(k>=node)//大于当前节点下所有节点数,
cur+=1;//cur向右
k-=node;
else
cur*=10;//向下
k-=1;
return (int)cur;
public int getNode(int n,long cur)
long next=cur+1;
long total=0;
while(cur<=n)
total+=Math.min(n+1,next)-cur;
cur*=10;
next*=10;
return (int)total;
以上是关于leetcode困难440字典序的第K小数字的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 440 字典序的第K小数字[字典树] HERODING的LeetCode之路
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小数字