数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数,求任意第n位对应的数字。
思路:
m) 数字按照0123。。101112.。开始排序,第n位是什么:int最大是有10位数,去除0第一位,然后每一个不同区间开始都是1pow(10, digit-1) ,区间的位置最后都是9 pow(10, digit-1)*digit个,每次n都会减去前一段的,如果n< 当前区间的个数,就返回 字符串的对应位,n/digit(这个区间位数)+firstnum [ n%digit]-‘0’ ;
代码:
class Solution {
public:
int findNthDigit(int n) {
//第一步,获取n的是几位数的区间
//去除第一个0
n-=1;
//最多有10位数的
for(int digit=1; digit<11; ++digit){
long long firstNumPart=pow(10, digit-1);
if( n< 9*firstNumPart*digit) //将数字排开后,的该位下最后一个位置
//找到了出现的区间了
return to_string(n/digit +firstNumPart)[n%digit]-'0';
n-= 9*firstNumPart*digit;
}
return 0;
}
};