其他分享
首页 > 其他分享> > 440. 字典序的第K小数字

440. 字典序的第K小数字

作者:互联网

题面:

 

 题解:前缀10字典序比2小,因此这个类似于类似于求前缀和。函数getnum(pre,n)求前缀pre为根结点的前缀和的数量。pre=1开始,如果当前节点的子节点数量大于k则pre*=10,否则 pre++。

代码:

class Solution {
public:
    int getnum(long long pre, long long n)
    {
        int res = 0;
        long long ne = pre + 1;
        while(pre <= n)
        {
            res += min(n+1,ne) - pre;
            ne *= 10;
            pre *= 10;
        }
        return res;
    }
    int findKthNumber(int n, int k) {
            int pre=1;
            while(k)
            {
                int p = getnum(pre, n);
                if(p < k) 
                {
                     k -=p;
                     if(k == 0)
                    {
                    return pre;
                    }
                    pre ++;
                }
                else
                {
                    k--;
                     if(k == 0)
                    {
                    return pre;
                    }
                    pre *= 10;
                }
            }
            return 0;
    }
};

 

标签:pre,10,前缀,int,440,long,getnum,字典,数字
来源: https://www.cnblogs.com/flyljz/p/15844698.html