440. lexicográficamente pequeño número de K
Teniendo en cuenta los números enteros n y k, n se encuentran lexicográficamente pequeños números 1 a k.
Nota: 1 ≤ k ≤ n ≤ 109.
Ejemplo:
Entrada:
n-: 13 es K: 2
Salida:
10
Explicación: La
disposición es lexicográficamente [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9], el segundo número es menor 10.
PD:
árbol de diez
class Solution {
public int findKthNumber(int n, int k) {
int cur = 1;
k--;
while (k > 0) {
long step = 0, first = cur, last = cur + 1;
while (first <= n) {
step += Math.min(last, (long) (n + 1)) - first;
first *= 10;
last *= 10;
}
if (step > k) {
//在树里
k--;
cur *= 10;
}
if (step <= k) {
//不在树里
k -= step;
++cur;
}
}
return cur;
}
}