题目:

题解:
#define MIN(x, y) ((x) < (y) ? (x) : (y))
int getSteps(int curr, long n) {
int steps = 0;
long first = curr;
long last = curr;
while (first <= n) {
steps += MIN(last, n) - first + 1;
first = first * 10;
last = last * 10 + 9;
}
return steps;
}
int findKthNumber(int n, int k) {
int curr = 1;
k--;
while (k > 0) {
int steps = getSteps(curr, n);
if (steps <= k) {
k -= steps;
curr++;
} else {
curr = curr*10;
k--;
}
}
return curr;
}


![[贪心+数学/数学+位运算] 两种方法O(1)解决 消减整数](https://i-blog.csdnimg.cn/direct/3758563ceea84349af45047cca5e8324.png)
















