题目
数字以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) {
if(n == 0){
return 0;
}
//首先找到对应的区间
long bit = 1;
int i = 1;
//字符个数
long count = 9;
while(n > count){
n = (int)(n - count);
i++;
bit = bit*10;
//表格字符个数列
count = i*bit*9;
}
//代表序列中要求的数字,确定数字
long num = bit +(n-1)/i;
//代表第几个字符,确定数字位数
int j = (n-1)%i+1;
int result = (int)(num/Math.pow(10,i-j))%10;
return result;
}
}