思路:本题的重点是总结规律
参考大佬总结的规律
注意:为什么采用n-1 去除digital 或对digital取余
class Solution {
public:
int findNthDigit(int n) {
if(n < 9) return n;
int digital = 1; //表示位数
long start = 1; //表示二位数的起始数字10 或三位数的起始数字100等
long count = 9; //表示二位数的数字 所占用的数字位数
while(n > count)
{
n-=count;
digital++; //表示当前 n 位所在的数是 几位数
start*=10; //表示当前 n 位所在的数是 几位数 的首个数 比如二位数的10 三位数的100
count = digital * 9 * start;
}
long num = start + (n-1)/digital; //表示当前 n 位所在的数
string s = to_string(num);
return s[(n-1)%digital]-'0';
}
};