class Solution {
public:
//数位dp
int digitAtIndex(int n) {
//最后num可能会暴int,所以用long long
long long i=1,num=9,base=1;//i为当前位数,num为该位共有多少数,base表示位数的起始值
while(n>i*num) //9 90 900 9000 i*num为该位总共有多少个,比如二位数一共有90个数
{
n-=num*i;
i++;
num*=10;
base*=10;
}//以此找出n是几位数
int number=base+(n+i-1)/i-1;//number为n是该位数的第几个数,比如11是二位数的第二个数
int r=n%i?n%i:i; //r为最后答案是i的第几位数。
for(int j=0;j<i-r;j++) number/=10;//把r位数后面的位数给删掉,比如12345,r为3,所以5-3,删除两位45最后number为45
return number%10;
}
};
03-30
183
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
08-30
4214
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-02
463
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)