Categorías
Algorithms

LeetCode – Enésimo dígito (Java)

Encuentra el n-ésimo dígito de la secuencia de números enteros infinitos 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …

Por ejemplo, dado 3, la salida debe ser 3. Dado 11, la salida debe ser 0. (El undécimo dígito de la secuencia 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, .. .es un 0, que es parte del número 10)

Solución Java

La solución es obvia cuando se enumera lo siguiente.

number range: # of digits in total
1 - 9  : 9
10 - 99 : 90 * 2
100 - 999 : 900 * 3
1000 - 9999 : 9000 * 4
... ... 

Por ejemplo, dado que n es 1000, primero -9 y luego -180. La izquierda es 811. El número es 100 + 810/3 = 370. El dígito es 0 (810% 3). Por lo tanto, el dígito es 3.

public int findNthDigit(int m) {
    long n=m; // convert int to long 
    long start=1,  len=1,  count=9;
 
    while(n>len*count){
        n=n-len*count;
        len++;
        count=count*10;
        start=start*10;
    }
 
    // identify the number
    start = start + (n-1)/len;
 
    // identify the digit
    return String.valueOf(start).charAt((int)((n-1)%len))-'0';
}

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *