classSolution{ publicintget_Count(int n, long x, long y){ int sum = 0; while (x <= n) { sum += Math.min(n + 1, y) - x; // 如n=15,则sum+=min(16,20)-10 x *= 10; y *= 10; } return sum; } publicintfindKthNumber(int n, int k){ int pre = 1; k--; // 扣除数字0 while (k > 0) { int now = get_Count(n, pre, pre + 1); if (k >= now) { // 说明不在这个前缀区间里 pre++; // 找下一个字典序前缀 k -= now; // 扣除这个前缀的所有数 } else { // 说明答案是这个前缀 pre *= 10; // 往下找 k--; // 扣除当前这个数 } } return pre; } }