描述
数字以 0123456789101112131415... 的格式作为一个字符序列,在这个序列中第 2 位(从下标 0 开始计算)是 2 ,第 10 位是 1 ,第 13 位是 1 ,以此类题,请你输出第 n 位对应的数字。
示例1
输入:0
返回值:0
示例2
输入:2
返回值:2
示例3
输入:10
返回值:1
示例4
输入:13
返回值:1
第一种解法
思路:数学
先观察数字规律
小于10,1~9,9个数字,9位
小于100,10~99,90个数字,180位
小于1000,100~999,900个数字,2700位
各个区间的下限上限是[0,10),[10, 100),[100,1000)...位数是1,2,3...,判断第n位数字对应的位数,具体代码如下
public int findNthDigit (int n) {
if(n < 0){
return 0;
}
//找到第n位数字的大致区间
long i = 1;
long count = 9;
long j = 1;
while (n > count){
n = (int) (n - count);
i *=10;
j++;
count = i*9*j;
}
//得出具体数字
String num = (i + (n - 1)/j)+"";
//求位置
int index = (int) ((n-1) % j);
return num.charAt(index) - '0';
}