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'; } |