题面:
题解:前缀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; } };