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小数字

LeetCode:乘法表中的第K小的数668

leetcode 31. Next Permutation(字典序的下一个)

Leetcode-378 有序矩阵中的第k小元素