1.数学法
https://blog.csdn.net/qq_38196982/article/details/104962098
此题和上一题不同的是正数序列不是从0开始,而是从1开始,且起始位置是第1位,
我们可以在序列的前面添加一个0,这样每一个区间的处理都一样了
如0-9 是10个数,10-19是10个数,如果不加0,则最初只有9个数
其他和上一题一样
代码如下:
class Solution {
public:
int findNthDigit(int n) {
//在正数序列前添加一个0,这样所有的处理都统一 0-9是10个数,10-19也是10个数
int k=0,num=0;
if(n<10)
return n;
while(n>0)
{
num=n;
n=n-9*pow(10,k)*(k+1);
k++;
}
int a=(num-1)/k;//对应的是添加的0
int b=(num-1)%k;
a=a+pow(10,k-1);
string s=to_string(a);
return int(s[b]-'0');
}
};