implementación Java LeetCode 440 lexicográfico pequeño número de K

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;
    }
}
Liberadas 1548 artículos originales · ganado elogios 20000 + · vistas 2,19 millones +

Supongo que te gusta

Origin blog.csdn.net/a1439775520/article/details/104913782
Recomendado
Clasificación