数字以 0123456789101112131415... 的格式作为一个字符序列,在这个序列中第 2 位(从下标 0 开始计算)是 2 ,第 10 位是 1 ,第 13 位是 1 ,以此类题,请你输出第 n 位对应的数字。
输入:2,返回:2
输入:10,返回:1
我们尝试来找一下规律:
- 小于10的数字一位数,1~9,共9个数字,9位;
- 小于100的数字两位数,10~99,共90个数字,180位;
- 小于1000的数字三位数,100~999,共900个数字,2700位;
public int findNthDigit (int n) {标签:10,digit,数字,int,sum,一位,start,序列 From: https://www.cnblogs.com/MarkLeeBYR/p/17169740.html
//记录n是几位数
int digit = 1;
//记录当前位数区间的起始数字:1,10,100...
long start = 1;
//记录当前区间之前总共有多少位数字
long sum = 9;
//将n定位在某个位数的区间中
while(n > sum){
n -= sum;
start *= 10;
digit++;
//该区间的总共位数
sum = 9 * start * digit;
}
//定位n在哪个数字上
String num = String.valueOf(start + (n - 1) / digit);
//定位n在数字的哪一位上
int index = (n - 1) % digit;
return num.charAt(index) - '0';
}