44 数字序列中某一位的数字
描述
数字以 0123456789101112131415... 的格式作为一个字符序列,在这个序列中第 2 位(从下标 0 开始计算)是 2 ,第 10 位是 1 ,第 13 位是 1 ,以此类题,请你输出第 n 位对应的数字。
1-9 这 9 个数占 9 个位置,10-99 这 90 个数占 180 个位置 。。。
先判断对应的数在哪个区间,然后求出这个数和某一位的坐标,即可求出这一位数
public int findNthDigit (int n) {
if(n<=0) return 0;
long times=1;
int digit=1;
long count=9;
while(n>count){
n-=count;
times*=10;
digit++;
count=9*times*digit;
}
long num = (n-1)/digit+times;
int index = (n-1)%digit;
for(int i=0;i<index;++i) times/=10;
return (int)(num/times)%10;
}