数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数,求任意第n位对应的数字。
示例 1:
输入:n = 3
输出:3
示例 2:
输入:n = 11
输出:0
限制:
0 <= n < 2^31
按照大佬的思路写的,就不是人做的。
class Solution {
public int findNthDigit(int n) {
long i = 1;
long digit = (int) Math.pow(10, i - 1);
long number = 9 * digit * i;
while (number < n) {
i = i + 1;
number = number + 9 * (int) Math.pow(10, i - 1) * i;
}
number = number - 9 * (int) Math.pow(10, i - 1) * i;
long res = n - number;
long temp = (int) Math.pow(10, i - 1) + res / i;
long tmp = res % i;
if (tmp == 0) return (int) ((temp-1) % 10);
return Integer.parseInt(String.valueOf(temp).substring((int)tmp - 1, (int)tmp));
}
}